Я ищу эффективный способ вернуть индексы для двумерного массива на основе значений в одномерном массиве. В настоящее время у меня мучительно медленная установка вложенного цикла.
Вот некоторые примеры данных и что я хочу получить:
data2d = np.array( [ [1,2] , [1,3] ,[3,4], [1,2] , [7,9] ])
data1d = np.array([1,2,3,4,5,6,7,8,9])
Я хотел бы вернуть индексы, где data2d равен data1d. Мой желаемый вывод будет этот 2d массив:
locs = np.array([[0, 1], [0, 2], [2, 3], [0, 1], [6, 8]])
Единственное, что я придумал, это вложенный цикл:
locs = np.full((np.shape(data2d)), np.nan)
for i in range(0, 5):
for j in range(0, 2):
loc_val = np.where(data1d == data2d[i, j])
loc_val = loc_val[0]
locs[i, j] = loc_val
Это было бы хорошо для небольшого набора данных, но у меня есть 87 600 двумерных сеток, каждая из которых имеет 428x614 точек сетки.