2016-02-11 3 views
6

У меня есть «маска» (булево) 2D-массив, и я хотел бы преобразовать его в список координат. Каков правильный numpythonic способ сделать это?Преобразование маски (булевой) в список координат x, y

вход будет что-то вроде этого:

[[False,False,True], 
[False,True,False]] 

и учитывая выше вход, выход должен быть:

[(0,2),(1,1)] 

ответ

5

Использование

  • np.where: Может быть использован, если вы хотите позже индексировать другой массив. Но результат не совсем то, что вы указали.
  • np.argwhere: Если вы хотите получить указанный результат. Но этот результат нельзя использовать для индексации другого массива.

Некоторые примеры кода:

import numpy as np 
a = np.array([[False,False,True], 
       [False,True,False]]) 
np.argwhere(a) # equivalent to checking a == True 
#array([[0, 2], 
#  [1, 1]], dtype=int64) 
np.where(a) # equivalent to checking a == True 
#(array([0, 1], dtype=int64), array([2, 1], dtype=int64)) 

И если вы хотите, чтобы преобразовать результат в списке есть ndarray.tolist() метод. Таким образом, вы можете позвонить np.argwhere(a).tolist().

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