У меня два пустых массива, чьи записи являются строками .Первый массив (array1
) имеет форму ( m, n )
, где m> 1 и n> 1.Второй массив (array2
) имеет форму (p, )
, где p - целое число больше 1. Записи в массиве 2 не повторяются (т.е. они уникальны) , тогда как массив1 может иметь несколькоэкземпляры одинаковых строк.
Я хочу заменить массив1 другим массивом такой же формы (как массив1), путем включения индексов (чисел) вместо строк .Эти индексы получены путем сравнения элементов массива1 с массивом2 .Каждая запись в array1 обязательно будет соответствовать некоторой записи в array2.
Здесь важна скорость , и я хочу найти самый быстрый способ сделать это.
Вот небольшой пример:
import numpy as np
array1 = np.asarray([['aa', 'cc', 'bb', 'aa', 'aa', 'bb'],
['cc', 'bb', 'cc', 'bb', 'aa', 'aa'],
['bb', 'cc', 'aa', 'aa', 'bb', 'cc']])
array2 = np.asarray(['aa', 'bb', 'cc'])
Вот как я сейчас подхожу к проблеме:
for k in range(array1.shape[0]):
array1[k] = np.asarray([j for i in range(array1.shape[1]) for j in range(len(array2)) if array1[k,i]==array2[j]])
print array1
[['0' '2' '1' '0' '0' '1']
['2' '1' '2' '1' '0' '0']
['1' '2' '0' '0' '1' '2']]
Но, когда я работаю с массивом 1 с огромным количеством строк и столбцов, я обнаружил, что вышеупомянутый способ не очень быстрый.
Какой может быть более быстрый способ достижения желаемой цели?