Скажем, у меня есть эти два массива:Как применить не целое число -> integer dict к массиву numpy?
dictionary = np.array(['a', 'b', 'c'])
array = np.array([['a', 'a', 'c'], ['b', 'b', 'c']])
И я хотел бы заменить каждый элемент в array
с индексом его значения в dictionary
. Итак:
for index, value in enumerate(dictionary):
array[array == value] = index
array = array.astype(int)
Чтобы получить:
array([[0, 0, 2],
[1, 1, 2]])
Есть ли Векторизованный способ сделать это? Я знаю, что если array
уже содержит индексы, и мне нужны строки в dictionary
, я мог бы просто сделать dictionary[array]
. Но мне действительно нужен «поиск» строк.
(я также вижу this answer, но интересно, если что-то новое было доступно с 2010 года)
Очень аккуратный! Спасибо. Подождите немного, чтобы узнать, есть ли у кого-то общее решение для не отсортированных словарей. (Вы вроде обойти необходимость поиска словаря вообще.) – capitalistcuttle
@capitalistcuttle Последний бит («Общий случай») предназначен для не отсортированных словарей. –
Ах, справа. Я еще не обнял его :). И я вижу, что он избегает сортировки словаря и использует сортированный вывод unique(). Большой! Кстати, в 2-й строке 2-го бит есть дополнительный прямоугольный кронштейн. И пара строк, описывающих косвенную обратную связь, была бы полезна. – capitalistcuttle