通过另一个数组

时间:2016-06-09 09:33:41

标签: python arrays numpy

这是我的问题。

  • a 是包含有限数字的100x100形状的2维numpy数组

  • b 是一个2-d bool数组,形状为100x100,包含 True和False

我的目标:

  

当b [i,j]的值== True

时,选择数组a的特定部分

我的代码在这里:

 select = a[np.array(np.where(b == True)).T]  

但结果显示某些索引超出界限。

有人有任何想法实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

那是因为你要转置索引数组。此外,您不需要将np.where()的结果转换为numpy数组,只需将其作为索引传递给第一个数组。

以下是一个例子:

>>> b = np.random.choice([0, 1], size=(10,10))
>>> b
array([[0, 0, 0, 1, 0, 1, 1, 0, 0, 0],
       [0, 1, 1, 0, 0, 0, 0, 1, 1, 1],
       [1, 1, 1, 1, 1, 0, 0, 0, 1, 0],
       [1, 1, 0, 1, 0, 0, 1, 0, 0, 1],
       [0, 1, 0, 0, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 0, 1, 0, 0],
       [0, 1, 1, 1, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 1, 1, 1, 0, 0, 1],
       [1, 0, 1, 0, 0, 1, 0, 1, 0, 0],
       [1, 0, 0, 1, 0, 1, 1, 0, 0, 1]])
>>> a = np.random.choice(100, size=(10,10))
>>> 
>>> a
array([[47, 90, 94, 11, 17, 65, 95, 57, 36, 43],
       [65, 82, 37, 93, 65, 32,  8, 47, 16, 12],
       [66, 60, 40, 90, 34, 30, 40,  2, 36, 65],
       [ 8, 53, 69,  0, 61, 60, 94, 37, 77, 43],
       [59, 47, 21, 93, 58,  0, 92, 26, 17, 44],
       [98, 16, 33, 56, 39, 30, 14, 93, 93, 58],
       [96, 40, 35, 17, 21, 70, 26,  0, 21, 81],
       [47,  4, 20, 82, 19, 89, 50, 26, 38,  4],
       [60,  3, 72, 56, 78, 55, 60, 53,  3, 87],
       [80,  1, 65,  2, 92, 92, 97, 17, 55, 67]])

>>> a[np.where(b)]
array([11, 65, 95, 82, 37, 47, 16, 12, 66, 60, 40, 90, 34, 36,  8, 53,  0,
       94, 43, 47, 58,  0, 92, 26, 17, 44, 98, 16, 33, 56, 39, 30, 93, 40,
       35, 17,  4, 19, 89, 50,  4, 60, 72, 55, 53, 80,  2, 92, 97, 67])

请注意,您不必将b==True用作np.where条件,当您传递布尔数组时,它将选择由python的Truth Value Testing确定的有效项。