numpy boolean索引多个条件

时间:2016-07-19 13:18:28

标签: python numpy

我有一个二维numpy数组,我使用的是python 3.5。我开始学习布尔索引,这很酷。我可以用我的二维数组做到这一点,arr。 mask = 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: 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 

我在mask3上收到错误。我是新手,所以我知道上面的代码在尝试解决它时效率不高。

任何提示将不胜感激。

1 个答案:

答案 0 :(得分:0)

这可能会有所帮助。考虑一个浮点​​值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])

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)]

收益

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])