我是 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指的是整个数组。
如何使用屏蔽方法而不是使用循环更正此代码?
不完全确定你想要什么,如果你想分配给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。
| 归档时间: |
|
| 查看次数: |
3012 次 |
| 最近记录: |