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

时间:2018-09-26 10:51:19

标签: python numpy

我偶然发现了这段代码:

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函数定义。

1 个答案:

答案 0 :(得分:0)

很难跟踪已编译的numpy代码的操作。即使可以找到astype方法,也可能必须向下挖掘几层才能看到所需的内容。顶部方法可能专注于解释参数,而转换本身可能发生在完全不同的代码部分中。

请注意,正是由于该object对象,您的数组才是None dtype。其他元素是整数

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'转换为浮点数nan

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

None转换为浮点数nan也就不足为奇了。毕竟,它代表not a number。但是,很难在numpy代码中找到实现等价的确切位置。