【发布时间】:2019-04-11 14:24:10
【问题描述】:
我有一个非常简单的任务,而 numpy 正在做一些我不明白的事情。我正在尝试用 0 到 1 之间的数字替换满足某些条件的数组元素,并且 numpy 正在将它们全部转换为零。例如:
In [1]: some_array = np.array([0,0,0,1,0,1,1,1,0])
In [2]: nonzero_idxs = np.where(some_array != 0)[0]
In [3]: nonzero_idxs
Out[3]: array([3, 5, 6, 7])
In [4]: some_array[nonzero_idxs] = 99
In [5]: some_array
Out[5]: array([ 0, 0, 0, 99, 0, 99, 99, 99, 0])
In [6]: some_array[nonzero_idxs] = 0.2
In [7]: some_array[nonzero_idxs]
Out[7]: array([0, 0, 0, 0])
In [8]: some_array[nonzero_idxs] == 0
Out[8]: array([ True, True, True, True], dtype=bool)
如上例所示,用任意值替换值按预期工作,但如果您尝试用小数替换它,它会将其变为零(而且它们不只是看起来 当您打印数组时就像零一样,它们的评估等于零)。当我尝试以其他方式解决此问题时会发生相同的行为,例如使用 np.place。
我正在终端上的 iPython 中执行此操作,如果这有什么不同的话。有人可以解释这里发生了什么,以及如何避免它吗?如有重复请见谅。
【问题讨论】:
-
好的,是的,我刚刚尝试过同样的测试……结果是 5。那么……为什么要强制它们成为整数?这对我来说似乎很奇怪。
-
谢谢@pault。答案隐藏在对该问题的回答中。如果数组只包含整数,它拒绝让您用浮点数替换元素。你必须做一些类似 some_array = some_array.astype(float) 的事情。我自己永远不会想到这一点。
-
也许这个问题应该作为这个问题的副本关闭。