numpy 改变元素匹配条件

标签 numpy

对于两个numpy数组a,b

a=[1,2,3]      b=[4,5,6]

我想把a的x<2.5数据改成b。所以我尝试了

a[a<2.5]=b

希望 a 为 a=[4,5,3]。 但这会出错

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    a[a<2.5]=b
ValueError: NumPy boolean array indexing assignment cannot assign 3 input values to the 2 output values where the mask is true

问题是什么?

最佳答案

您看到的问题是掩码如何作用于 numpy 数组的结果。

当你写作时

a[a < 2.5]

你得到了a的元素与面具匹配 a < 2.5 .在这种情况下,这将只是前两个元素。

尝试做

a[a < 2.5] = b

是一个错误,因为 b有三个元素,但是 a[a < 2.5]只有两个。


在 numpy 中实现您想要的结果的一种简单方法是使用 np.where .

语法是np.where(condition, valuesWhereTrue, valuesWhereFalse) .

在你的情况下,你可以写

newArray = np.where(a < 2.5, b, a)

或者,如果您不想要新数组的开销,您可以就地执行替换(正如您在问题中尝试做的那样)。为此,您可以编写:

idxs = a < 2.5
a[idxs] = b[idxs]

关于numpy 改变元素匹配条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25103731/

相关文章:

python - 如何让 numpy.exp 能够处理数组和标量?

python - 查询保存为 npz 的 NumPy 数组的 NumPy 数组很慢

python - Numpy:通过分箱从关联中查找不同值的计数

python - 有没有一种快速的方法来创建一个 numpy 数组,将唯一值减少到最低形式?

python - 从图像中查找车轮中的辐条总数 - OpenCV (Python)

python - Python Numpy 中意外的傅立叶变换结果

python - 如何让 Numpy 给出列表数组而不是元组?

python - 导入错误 : : Symbol not found: __PyErr_ReplaceException

python - 获取具有整数或 bool 索引的 numpy 数组 View

python - 从 scikit 管道中提取选定的特征名称