此问题已在此处有答案:
Create numpy matrix filled with NaNs(11个回答)
After x = x.y()
, why did x
become None
instead of being modified (possibly causing "AttributeError: 'NoneType' object has no attribute")?(1个答案)
28天前关闭
我想初始化并填充一个numpy
数组。最好的办法是什么?
这正如我所期望的那样:
>>> import numpy as np
>>> np.empty(3)
array([ -1.28822975e-231, -1.73060252e-077, 2.23946712e-314])
但这不是:
>>> np.empty(3).fill(np.nan)
>>>
什么都没有?
>>> type(np.empty(3))
<type 'numpy.ndarray'>
在我看来,np.empty()
调用返回了正确的对象类型,所以我不明白为什么.fill()
不工作?
请检查np.empty()
的结果,第一次运行正常:
>>> a = np.empty(3)
>>> a.fill(np.nan)
>>> a
array([ nan, nan, nan])
为什么我需要赋值给一个变量才能使用np.fill()
?我错过了一个更好的选择吗?
5条答案
按热度按时间xuo3flqw1#
您也可以尝试:
相关文档:
虽然我认为这可能只在numpy 1.8+中可用
z4bn682m2#
np.fill
就地修改数组,并返回None
。因此,如果你将结果赋给一个名字,它会得到一个值None
。另一种方法是使用返回
nan
的表达式,例如:lskq00tm3#
我发现这很容易记住:
出于好奇,我计时了一下,@JoshAdel的答案和@shx2的答案都比我的大数组快得多。
mwg9r5ms4#
仅供将来参考,乘以
np.nan
仅适用于np.nan
的数学性质。对于一个通用值N
,需要使用np.ones() * N
来模拟可接受的答案,然而,从速度方面来看,这不是一个非常好的选择。最好的选择应该是
np.full()
,如果你不能使用,np.zeros() + N
似乎比np.ones() * N
更好,而np.empty() + N
或np.empty() * N
根本不适合。请注意,当N
是np.nan
时,np.zeros() + N
也可以工作。e4eetjau5#
如果你不介意
None
,你可以用途: