2015-09-11 3 views
1

у меня есть этот массив в результате вычитания двух изображений после получения там целых значений 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 . Мой вопрос здесь, есть ли эффективный способ найти индексы ненулевых значений?

+0

- это мой ответ, что вы ищете? – jimh

ответ

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[2][1] 
4 
+0

Если массив равен l = [[25,5,5,0,0], [0,0,0,0,1,1], [0,8,0,0,2], [0,0, 0,511,509], [0,0,0,511,510], [0,0,0,511,511]] Я хочу, чтобы результат был индексом (0,0) и (0,2), поскольку значения не равны нулю, вы меня поняли ? – Prince

+0

Я не уверен, что да, или как это дает вам (0,0) и (0,2) – jimh

+0

, так как значения не равны нулю, я имею в виду [25,5,5,0,0] здесь у меня есть 25 , 5 и 5 [0,8,0,0,2], и для этого у меня есть 0,8 и 0 не все три значения равны нулю – Prince

Смежные вопросы