繁体   English   中英

无法从多个NumPy阵列中检索所需的索引

[英]Unable to retrieve required indices from multiple NumPy arrays

我有4个相同形状的numpy阵列(即2d)。 我必须知道d的元素小于20的最后一个数组(d)的索引,但是d的那些索引应该位于数组(a)的元素是1的区域中; 并且数组(b)和(c)的元素不是1。

我尝试如下:

mask = (a == 1)|(b != 1)|(c != 1)

answer = d[mask | d < 20]

现在,我必须将d的这些区域设置为1; 和d的所有其他区域成0。

d[answer] = 1
d[d!=1] = 0
print d

我无法解决这个问题。 你是如何解决的?

import numpy as np

a = np.array([[0,0,0,1,1,1,1,1,0,0,0],
                 [0,0,0,1,1,1,1,1,0,0,0],
                 [0,0,0,1,1,1,1,1,0,0,0],
                 [0,0,0,1,1,1,1,1,0,0,0],
                 [0,0,0,1,1,1,1,1,0,0,0],
                 [0,0,0,1,1,1,1,1,0,0,0]])

b = np.array([[0,0,0,1,1,0,0,0,0,0,0],
                 [0,0,0,0,0,0,1,1,0,0,0],
                 [0,0,0,1,0,1,0,0,0,0,0],
                 [0,0,0,1,1,1,0,1,0,0,0],
                 [0,0,0,0,0,0,1,0,0,0,0],
                 [0,0,0,0,1,0,1,0,0,0,0]])

c = np.array([[0,0,0,0,0,0,1,0,0,0,0],
                 [0,0,0,0,0,0,0,0,0,0,0],
                 [0,0,0,0,0,0,1,1,0,0,0],
                 [0,0,0,0,0,0,1,0,0,0,0],
                 [0,0,0,0,1,0,0,0,0,0,0],
                 [0,0,0,0,0,1,0,0,0,0,0]])


d = np.array([[0,56,89,67,12,28,11,12,14,8,240],
                 [1,57,89,67,18,25,11,12,14,9,230],
                 [4,51,89,87,19,20,51,92,54,7,210],
                 [6,46,89,67,51,35,11,12,14,6,200],
                 [8,36,89,97,43,67,81,42,14,1,220],
                 [9,16,89,67,49,97,11,12,14,2,255]])

条件应该一起进行AND,而不是OR-ed。 您可以先获取表示所需区域的布尔数组/掩码,然后根据它修改d

mask = (a == 1) & (b != 1) & (c != 1) & (d < 20)
d[mask] = 1
d[~mask] = 0
print d

输出:

[[0 0 0 0 0 0 0 1 0 0 0]
 [0 0 0 0 1 0 0 0 0 0 0]
 [0 0 0 0 1 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 1 0 0 0]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM