初始化和填充numpy数组的最佳方法?

tbc*_*tbc 27 python arrays numpy initialization multidimensional-array

我想初始化并填充一个numpy数组.什么是最好的方法?

这符合我的预期:

>>> import numpy as np
>>> np.empty(3)
array([ -1.28822975e-231,  -1.73060252e-077,   2.23946712e-314])
Run Code Online (Sandbox Code Playgroud)

但这不是:

>>> np.empty(3).fill(np.nan)
>>> 
Run Code Online (Sandbox Code Playgroud)

没有?

>>> type(np.empty(3))
<type 'numpy.ndarray'>
Run Code Online (Sandbox Code Playgroud)

在我看来,np.empty()调用返回正确类型的对象,所以我不明白为什么.fill()不工作?

分配np.empty()第一个工作结果正常:

>>> a = np.empty(3)
>>> a.fill(np.nan)
>>> a
array([ nan,  nan,  nan])
Run Code Online (Sandbox Code Playgroud)

为什么我需要分配给变量才能使用np.fill()?我错过了一个更好的选择吗?

Jos*_*del 40

你也可以尝试:

In [79]: np.full(3, np.nan)
Out[79]: array([ nan,  nan,  nan])
Run Code Online (Sandbox Code Playgroud)

相关文件:

Definition: np.full(shape, fill_value, dtype=None, order='C')
Docstring:
Return a new array of given shape and type, filled with `fill_value`.
Run Code Online (Sandbox Code Playgroud)

虽然我认为这可能只适用于numpy 1.8+

  • 这是正确的方法.如果您使用的是旧版本,则需要执行np.zeros(3)+值 (2认同)

shx*_*hx2 27

np.fill在原地修改数组,然后返回None.因此,如果您将结果分配给名称,则其值为None.

另一种方法是使用返回的表达式nan,例如:

a = np.empty(3) * np.nan
Run Code Online (Sandbox Code Playgroud)

  • 但是请注意,这不适用于通用值,对于这种情况,@JoshAdel 的答案更适合 NumPy 1.8+,而对于早期版本,应该使用 `np.zeros(shape) + value`。有关时间安排,请参阅我的答案。 (2认同)