IIUC, я думаю, вы можете использовать np.indices
.Возьмите ваш пример:
>>> img
array([[38, 0, 0, 0, 0, 0],
[46, 3, 0, 0, 0, 0],
[46, 3, 0, 0, 0, 0],
[74, 0, 0, 0, 0, 0],
[74, 0, 0, 0, 0, 0],
[74, 0, 0, 0, 0, 0]])
value = img.flatten()
y,x = np.indices(img.shape).reshape(-1,len(value))
>>> x
array([0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5])
>>> y
array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5])
>>> value
array([38, 0, 0, 0, 0, 0, 46, 3, 0, 0, 0, 0, 46, 3, 0, 0, 0,
0, 74, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 74, 0, 0, 0,
0, 0])
Итак, где x
равно 0, а y
равно 0, вы получите value
38, где x
равно 0 и y
равно 1, вы получите value
46 и т. Д.
Редактировать : В своем комментарии вы сказали, что хотите отфильтровать нули.Вы можете сделать это с np.where
и np.nonzero
:
y,x = np.where(img)
value = img[np.nonzero(img)]
>>> y
array([0, 1, 1, 2, 2, 3, 4, 5])
>>> x
array([0, 0, 1, 0, 1, 0, 0, 0])
>>> value
array([38, 46, 3, 46, 3, 74, 74, 74])