我是 Python 的新手。在练习期间,我应该使用掩码将以下列表中所有低于 100 的值乘以 2:
a = np.array([230, 10, 284, 39, 76])
Run Code Online (Sandbox Code Playgroud)
所以我写了下面的代码:
import numpy as np
a = np.array([230, 10, 284, 39, 76])
cut = 100
a[a < cut] = a*2
Run Code Online (Sandbox Code Playgroud)
这会导致以下错误:
IndexError: index 230 is out of bounds for axis 0 with size 5
这令人困惑,因为根据我的理解,a
in[a < cut]
实际上指的是 array 中的每个值a
,但a
ina*2
指的是整个数组。
如何使用屏蔽方法而不是使用循环更正此代码?
不完全确定你想要什么,如果你想分配给a < cut
持有的地方(a < cut = [0, 1, 0, 1, 1]
是布尔索引),当你分配给时a[a < cut]
,你分配给元素为1的地方,这意味着在右侧它需要一个numpy数组尺寸 3(当然也可以是一个数字)。你可以这样做
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])
Run Code Online (Sandbox Code Playgroud)
或者
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])
Run Code Online (Sandbox Code Playgroud)
将所选元素乘以 2。