我是Python新手。在练习期间,我应该使用掩码将以下列表中低于 100 的所有值乘以 2:
a = np.array([230, 10, 284, 39, 76])
所以我编写了以下代码:
import numpy as np
a = np.array([230, 10, 284, 39, 76])
cut = 100
a[a < cut] = a*2
这会导致以下错误:
IndexError:索引 230 超出尺寸为 5 的轴 0 的范围
这很令人困惑,因为据我了解,a
在[a < cut]
实际上指的是数组 a
中的每个值,但是a
在a*2
指的是整个数组。
如何使用屏蔽方法而不是使用循环来更正此代码?
最佳答案
不太确定你想要什么,如果你想分配到 a < cut
的地方当您分配给 a < cut = [0, 1, 0, 1, 1]
时,成立( a[a < cut]
是 bool 索引) ,您分配给元素为 1 的位置,这意味着在右侧它需要一个大小为 3 (或者当然是一个数字)的 numpy 数组。你可以这样做
In [1]: a = np.array([230, 10, 284, 39, 76])
In [2]: a[a < cut] = 999
In [3]: a
Out[3]: array([230, 999, 284, 999, 999])
或者
In [1]: a = np.array([230, 10, 284, 39, 76])
In [2]: a[a < cut] = a[a < cut] * 2
In [3]: a
Out[3]: array([230, 20, 284, 78, 152])
将所选元素乘以 2。
关于python - 带掩码的 numpy 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54600851/