我偶然发现了这段代码:
np.array([1,2,None]).astype(float)
哪个会产生:
array([ 1., 2., nan])
我想看看这段代码如何将None转换为nan。因此,我在Numpy的GitHub存储库中搜索了astype函数定义。您能帮我找到显示将None转换为nan的代码的部分吗?我没有足够的python知识来了解Numpy之类的库是如何工作的。看完他们的代码后,我觉得我对python不太了解。
def astype(self, typecode):
""
return self._rc(self.array.astype(typecode))
我不知道Numpy如何使用此功能。我在整个存储库中找不到其他类型的astype函数定义。
答案 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
代码中找到实现等价的确切位置。