NumPy布尔索引多个条件

6

我有一个二维的numpy数组,并且正在使用Python 3.5。我开始学习布尔索引,这非常酷。我可以对我的二维数组arr进行操作。

掩码 = arr > 127

arr[mask] = 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

我为我的索引尝试了多个条件运算符,但是出现了以下错误:

ValueError: 布尔索引数组应该只有一维,布尔索引数组应该只有一维。

我尝试了多个版本来尝试让它工作。这里是一个尝试,产生了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 

我在mask3上收到了错误。我是新手,所以我知道上面的代码不够高效,正在努力解决它。

如果有任何提示,将不胜感激。


arr[arr < -10] = 0, arr[arr < 15] = arr[arr < 15] + 5arr[arr >= 15] = 30 - user707650
你的问题在于你展示了代码和代码的错误,但没有展示实际产生错误的代码。这不是很实际,因为我们必须猜测你实际编写的内容才能得到该错误。 - user707650
1
我认为你的掩码创建可能需要一些帮助:mask1 = arr<-10 mask2 = ~mask1 & (arr<15) mask3 = ~(mask1 | mask2),然后使用 mask1,2,3 来设置 0,+5 和 30 的值。 - Divakar
1个回答

9
这可能会有所帮助。考虑一个浮点值的numpy数组foo。
import numpy as np
foo=np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8])

foo产生的结果

array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.8, 0.8])

这是获取foo > 0.3值的方法:

foo[np.where( foo > 0.3)]

产出率(yields)
array([0.4, 0.5, 0.6, 0.7, 0.8])

以下是如何使用多个条件执行相同操作。在此示例中,值大于0.3且小于0.6。

foo[np.logical_and(foo > 0.3, foo < 0.6)]

收益率
array([0.4, 0.5])

使用布尔蒙版数组作为替代方案

mask_1 = foo > 0.3
mask_2 = foo < 0.6
mask_3 = np.logical_and(mask_1, mask_2)
mask_3

产生一个布尔掩码数组。
array([False, False, False,  True,  True, False])

然后,您可以使用它来通过以下方式切割数组

foo[mask_3]

收益率

array([0.4, 0.5])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接