这是我的问题。
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]
但结果显示某些索引超出界限。
有人有任何想法实现这一目标吗?
答案 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确定的有效项。