为什么基于另一个数组的元素更新Numpy数组中的元素会将所有值变为零



假设我有两个大小相同的Numpy 1D数组ab

import numpy as np
a = np.full(10, -10)
b = np.random.rand(10)
print(a)
# [-10 -10 -10 -10 -10 -10 -10 -10 -10 -10]
print(b)
# [0.8725654  0.48385524 0.67801994 0.30381863 0.95460565 0.73915384 0.38097293 0.4604181  0.91182102 0.33428477]

现在,我想使用for循环,根据一些条件,使用数组b中的元素更新数组a,例如:

for i, x in enumerate(a):
if x < b[i]:
a[i] = b[i]
print(a)
# [0 0 0 0 0 0 0 0 0 0]

为什么我得到一个全零的数组,而不是数组b中的值?

如果使用a = np.full(10, -10),则数据类型为int32。因此,您从数组b中指定的值将四舍五入为0。只需使用:

a = np.full(10, -10, dtype=float)

它应该起作用。

koxx的答案是正确的,但我也建议您使用numpy方法而不是for循环来执行此操作。这个代码应该给你相同的输出:

import numpy as np
a = np.full(10, 0.5)
b = np.random.rand(10)
a = np.maximum(a, b)

最新更新