我有一个二维 numpy 数组,我使用的是 python 3.5。我开始学习布尔索引,这很酷。我可以用我的二维数组 arr 来做到这一点。掩码 = arr > 127 arr[掩码] = 0
这很完美,但现在我正在尝试更改此逻辑以使用布尔索引
for x in range(arr.shape[0]):
for y in range(arr.shape[1]):
if arr[x,y] < -10:
arr[x,y] = 0
elif arr[x,y] < 15:
arr[x,y] = arr[x,y] + 5
else:
arr[x,y] = 30
Run Code Online (Sandbox Code Playgroud)
我为索引尝试了多个条件运算符,但出现以下错误:
ValueError: boolean index array should have 1 dimension boolean index array should have 1 dimension。
我尝试了多个版本来尝试让它发挥作用。这是产生 ValueError 的一次尝试。
arr_temp = arr.copy()
mask = arry_temp < -10
mask2 = arry_temp < 15
mask3 = mask ^ mask3
arr[mask] = 0
arr[mask3] = arry[mask3] + 5
arry[~mask2] = 30
Run Code Online (Sandbox Code Playgroud)
我在 mask3 上收到错误。我对此很陌生,所以我知道上面的代码无法有效地解决它。
任何提示将不胜感激。
这可能会有所帮助。考虑浮点值 foo 的 numpy 数组。
import numpy as np
foo=np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8])
Run Code Online (Sandbox Code Playgroud)
foo 产量
array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.8, 0.8])
Run Code Online (Sandbox Code Playgroud)
这是获取 foo > 0.3 中的值的方法
foo[np.where( foo > 0.3)]
Run Code Online (Sandbox Code Playgroud)
产量
array([0.4, 0.5, 0.6, 0.7, 0.8])
Run Code Online (Sandbox Code Playgroud)
这是在多个条件下执行相同操作的方法。在本例中,值 > 0.3 且小于 0.6。
foo[np.logical_and(foo > 0.3, foo < 0.6)]
Run Code Online (Sandbox Code Playgroud)
产量
array([0.4, 0.5])
Run Code Online (Sandbox Code Playgroud)
或者使用布尔掩码数组
mask_1 = foo > 0.3
mask_2 = foo < 0.6
mask_3 = np.logical_and(mask_1, mask_2)
mask_3
Run Code Online (Sandbox Code Playgroud)
产生一个布尔掩码数组
array([False, False, False, True, True, False])
Run Code Online (Sandbox Code Playgroud)
然后您可以使用它来切片数组
foo[mask_3]
Run Code Online (Sandbox Code Playgroud)
产量
array([0.4, 0.5])
Run Code Online (Sandbox Code Playgroud)