我有以下代码:
r = numpy.zeros(shape = (width, height, 9))
它创建了一个宽x高x 9的矩阵,全是0。相反,我想知道是否有一个函数或方法,以一种简单的方式将它们初始化为nan。
我有以下代码:
r = numpy.zeros(shape = (width, height, 9))
它创建了一个宽x高x 9的矩阵,全是0。相反,我想知道是否有一个函数或方法,以一种简单的方式将它们初始化为nan。
当前回答
另一种选择是使用numpy。full, NumPy 1.8+中可用的选项
a = np.full([height, width, 9], np.nan)
这是非常灵活的,你可以用任何你想要的数字来填充它。
其他回答
另一种选择是使用numpy。full, NumPy 1.8+中可用的选项
a = np.full([height, width, 9], np.nan)
这是非常灵活的,你可以用任何你想要的数字来填充它。
>>> width = 2
>>> height = 3
>>> r = np.full((width, height, 9), np.nan)
>>> print(r)
array([[[nan, nan, nan, nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, nan, nan, nan]],
[[nan, nan, nan, nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan, nan, nan, nan]]])
>>> r.shape
(2, 3, 9)
你熟悉numpy.nan吗?
你可以创建你自己的方法,比如:
def nans(shape, dtype=float):
a = numpy.empty(shape, dtype)
a.fill(numpy.nan)
return a
Then
nans([3,4])
将输出
array([[ NaN, NaN, NaN, NaN],
[ NaN, NaN, NaN, NaN],
[ NaN, NaN, NaN, NaN]])
我在一个邮件列表线程中找到了这个代码。
请原谅我的迟到,但这里是大型数组的最快解决方案,iff单精度(f4 float32)是你所需要的。是的,np。南也在工作。
def full_single_prec(n):
return numpy.full(n, val, dtype='f4')
另一种替代方法是numpy.broadcast_to(val,n),它在常量时间内返回,与大小无关,也是内存效率最高的(它返回重复元素的视图)。需要注意的是返回值是只读的。
下面是使用与Nico Schlömer的答案相同的基准测试提出的所有其他方法的性能比较。