我有以下代码:
r = numpy.zeros(shape = (width, height, 9))
它创建了一个宽x高x 9的矩阵,全是0。相反,我想知道是否有一个函数或方法,以一种简单的方式将它们初始化为nan。
我有以下代码:
r = numpy.zeros(shape = (width, height, 9))
它创建了一个宽x高x 9的矩阵,全是0。相反,我想知道是否有一个函数或方法,以一种简单的方式将它们初始化为nan。
当前回答
只是一个警告,使用np.empty()初始化而不随后编辑值可能会导致(内存分配?)问题:
arr1 = np.empty(96)
arr2 = np.empty(96)
print(arr1)
print(arr2)
# [nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 1. 1.
# 1. 1. 2. 2. 2. 2. nan nan nan nan nan nan nan nan 0. 0. 0. 0.
# 0. 0. 0. 0. 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 nan nan]
#
# [nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 1. 1.
# 1. 1. 2. 2. 2. 2. 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 nan nan nan nan nan nan nan nan nan nan nan nan
# nan nan nan nan nan nan]
在数组中初始化的浮点数在我的脚本中的其他地方使用,但与变量arr1或arr2根本没有关联。令人毛骨悚然的。
来自用户@JHBonarius的回答解决了这个问题:
arr = np.tile(np.nan, 96)
print(arr)
# [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
# 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]
其他回答
这里还没有提到的另一种可能性是使用NumPy平铺:
a = numpy.tile(numpy.nan, (3, 3))
也给了
array([[ NaN, NaN, NaN],
[ NaN, NaN, NaN],
[ NaN, NaN, NaN]])
我不知道速度比较。
另一种选择是使用numpy。full, NumPy 1.8+中可用的选项
a = np.full([height, width, 9], np.nan)
这是非常灵活的,你可以用任何你想要的数字来填充它。
只是一个警告,使用np.empty()初始化而不随后编辑值可能会导致(内存分配?)问题:
arr1 = np.empty(96)
arr2 = np.empty(96)
print(arr1)
print(arr2)
# [nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 1. 1.
# 1. 1. 2. 2. 2. 2. nan nan nan nan nan nan nan nan 0. 0. 0. 0.
# 0. 0. 0. 0. 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 nan nan]
#
# [nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan 1. 1.
# 1. 1. 2. 2. 2. 2. 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 nan nan nan nan nan nan nan nan nan nan nan nan
# nan nan nan nan nan nan]
在数组中初始化的浮点数在我的脚本中的其他地方使用,但与变量arr1或arr2根本没有关联。令人毛骨悚然的。
来自用户@JHBonarius的回答解决了这个问题:
arr = np.tile(np.nan, 96)
print(arr)
# [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
# 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]
>>> 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)
如果你没有立即回忆起.empty或.full方法,你总是可以使用乘法:
>>> np.nan * np.ones(shape=(3,2))
array([[ nan, nan],
[ nan, nan],
[ nan, nan]])
当然,它也适用于任何其他数值:
>>> 42 * np.ones(shape=(3,2))
array([[ 42, 42],
[ 42, 42],
[ 42, 42]])
但是@u0b34a0f6ae接受的答案是快3倍(CPU周期,而不是大脑周期来记住numpy语法;):
$ python -mtimeit "import numpy as np; X = np.empty((100,100));" "X[:] = np.nan;"
100000 loops, best of 3: 8.9 usec per loop
(predict)laneh@predict:~/src/predict/predict/webapp$ master
$ python -mtimeit "import numpy as np; X = np.ones((100,100));" "X *= np.nan;"
10000 loops, best of 3: 24.9 usec per loop