我相信已经提出了 like 个问题,但没有一个问题可以解决我面临的问题。
我有一个形状为(H,W,L)
的数组-我必须遍历该数组的每个实例以过滤出满足特定条件的值(它们的x,y位置)。 (例如val > t_r
和val < t_c
)-我必须对K个值中的每一个重复此操作。
例如:如果我们有一个形状为(2,3,4)的数组
A = [[[1,2,3,], [3,4,5,]],
[[6,7,8],[1,4,5]],
[[5,7,7],[9,4,3]],
[[1,2,4],[4,6,7]]]
假设第一个条件为val > 2
,第二个条件为val < 6
,并将(row,col)值存储在N x 3
数组中。前两个值是'row','col'
,最后一个值对应于图层/第三维。
那么该操作的预期输出应类似于-
output = [[0,2,0],[1,0,0],[1,0,0],[1,1,0],[1,2,0]....]
对应于从A[:,:,0]
过滤的值
我想到的一种方法是-使用3个for循环-i,j,k遍历每个元素,但是我无法弄清楚确切的实现。我还想尽可能地实现矢量化。我可以使用一些指导。
答案 0 :(得分:1)
您可以使用np.nonzero
并向量化比较。
a = np.asarray(A)
res = np.vstack(np.nonzero((a>2)&(a<6))).T
array([[0, 0, 2],
[0, 1, 0],
[0, 1, 1],
[0, 1, 2],
[1, 1, 1],
[1, 1, 2],
[2, 0, 0],
[2, 1, 1],
[2, 1, 2],
[3, 0, 2],
[3, 1, 0]], dtype=int64)
您始终可以根据自己的喜好对列进行重新排序,例如:
res[:, [1,2,0]]
array([[0, 2, 0],
[1, 0, 0],
[1, 1, 0],
[1, 2, 0],
[1, 1, 1],
[1, 2, 1],
[0, 0, 2],
[1, 1, 2],
[1, 2, 2],
[0, 2, 3],
[1, 0, 3]], dtype=int64)