带屏蔽的 numpy 分配

ali*_*ice 3 python numpy

我是 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

这令人困惑,因为根据我的理解,ain[a < cut]实际上指的是 array 中的每个值a,但aina*2指的是整个数组。

如何使用屏蔽方法而不是使用循环更正此代码?

Kev*_* He 5

不完全确定你想要什么,如果你想分配给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。