我在哪里可以找到Numpy的astype()函数定义?

问题描述 投票:0回答:1

我偶然发现了这段代码:

np.array([1,2,None]).astype(float)

哪个产生:

array([ 1.,  2., nan])

我想看看这段代码如何将None转换为nan。所以我在Numpy的GitHub存储库中搜索了astype函数定义。你能帮我找到它显示用于将None转换为nan的代码的部分吗?我没有足够的python知识来理解像Numpy这样的库是如何做的。看完他们的代码后,我觉得我对python知之甚少。

我能从中找到的就是https://github.com/numpy/numpy/blob/464f79eb1d05bf938d16b49da1c39a4e02506fa3/numpy/lib/user_array.py#L240

def astype(self, typecode):
        ""
        return self._rc(self.array.astype(typecode))

我不知道Numpy如何使用这个功能。我在整个存储库中找不到任何其他类型的astype函数定义。

python numpy
1个回答
0
投票

跟踪已编译的numpy代码的操作非常困难。即使你可以找到astype方法,你可能需要挖几个层来看你想要的。 top方法可能侧重于解释参数,而转换本身可能在完全不同的代码段中进行。

请注意,您的数组是object dtype,正是因为None对象。其他元素是整数,

In [48]: np.array([1,2,None])
Out[48]: array([1, 2, None], dtype=object)

如果我告诉它制作一个int dtype数组,它会引发一个错误:

In [49]: np.array([1,2,None],int)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-49-c65114b3ba97> in <module>()
----> 1 np.array([1,2,None],int)

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

这与我用int(None)得到的错误相同。

指定float dtype,我像你一样得到nan。实际上,这个np.array调用与你的astype方法相同。 (看看我的意思是很难确定'转换'的位置?)

In [50]: np.array([1,2,None],float)
Out[50]: array([ 1.,  2., nan])

现在float(None)引发了类似的错误,因此numpy上的None处理与Python不同。

numpy还将字符串'nan'转换为float nan

In [56]: np.array([1,2,'nan'],float)
Out[56]: array([ 1.,  2., nan])

None转换为浮动nan并不奇怪。毕竟,它代表not a number。但是很难在numpy代码中找到确切的位置(或位置)。

© www.soinside.com 2019 - 2024. All rights reserved.