Если у меня есть следующее
import numpy as np
mid_img = np.array([[0, 0, 1],
[2, 0, 2],
[3, 1, 0]])
values = np.array([0, 1, 2, 3, 4])
locations = np.full((len(values), 2), [-1, -1])
locations[np.argwhere(mid_img == values)] = mid_img # this of course doesn't work, but hopefully shows intent
'location' будет выглядеть примерно так (показывается только как промежуточный шаг для объяснения. Получение этого вывода не требуется.
[[[0, 0], [0, 1], [1, 1], [2, 2]], #ie, locations matching values[0]
[[0, 2], [2, 1]], #ie, locations matching values[1]
[[1, 0], [1, 2]], #ie, locations matching values[2]
[[2, 0]]] #ie, locations matching values[3]
[[-1, -1]]] #ie, values[4] not found
Окончательный результат будет затем случайным образом выбирать местоположение для каждой строки значения:
print locations
Выход:
[[0, 1],
[2, 1],
[1, 0],
[2, 0],
[-1, -1]
Вот зацикленная версия процесса:
for row_index in np.arange(0, len(values)):
found_indices = np.argwhere(mid_img == row_index)
try:
locations[row_index] = found_indices[np.random.randint(len(found_indices))]
except ValueError:
pass