找出数组元素的索引

时间:2015-09-11 22:16:43

标签: python arrays image-processing

我将此数组作为在将RGB整数值作为数组

后减去两个图像的结果
arr = img1 - img2

[[[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 0]]]

我使用这些代码行来改变数组的形状以添加每个像素减法的索引

x, y, z = arr.shape
indices = np.vstack(np.unravel_index(np.arange(x*y), (y, x))).T
result = np.hstack((arr.reshape(x*y, z), indices))

以及结果如下:

[[  0   0   0   0   0]
 [  0   0   0   0   1]
 [  0   0   0   0   2]
 ..., 
 [  0   0   0 511 509]
 [  0   0   0 511 510]
 [  0   0   0 511 511]]

每行中的前三个值是RGB差异,后两个值是X和Y索引 我的问题是,有没有一种有效的方法来找到非零值的指数?

1 个答案:

答案 0 :(得分:0)

如果我理解你的说法是正确的,那么你需要列表中的每个列表......

说这是你的清单:

l=[[0,0,0,0,0],[0,0,0,0,1],[0,0,0,0,2],[0,0,0,511,509],[0,0,0,511,510],[0,0,0,511,511]]

尝试跑步:

import numpy as np
ans=[np.nonzero(l[i])[0] for i in range(1,len(l))]
print ans

返回:

[array([4]), array([4]), array([3, 4]), array([3, 4]), array([3, 4])]

所以它是一个包含数组的数组,每个列表中的每个非零元素都有索引。由于它使用列表理解,它运行得非常快,并且加入就像使用索引一样简单。它只是ans [列表中的列表] [非零指数的数量]如下:

ans[2][1]
4
相关问题