Рассмотрим следующее:
tmp1 = ['a', 'b', 'c', 'd', 'e']
tmp2 = ['f', 'g', 'h', 'b', 'd']
tmp3 = ['b', 'i', 'j', 'k', 'l']
matr = np.array([tmp1, tmp2, tmp3])
matr
Выходит матрица:
array([['a', 'b', 'c', 'd', 'e'],
['f', 'g', 'h', 'b', 'd'],
['b', 'i', 'j', 'k', 'l']],
dtype='|S1')
Теперь я хочу узнать сумму значений в каждой строке, которая пересекает вектор. Скажи,
vec = ['a', 'c', 'f', 'b']
[sum([y in vec for y in row]) for row in matr]
Returns
[3, 2, 1]
Это желаемый результат. Проблема в том, что мой 'matr' на самом деле равен ≈ 1000000 x 2200, и у меня есть 6700 векторов для сравнения. Решение, которое я здесь нашел, слишком медленное, чтобы пытаться.
Как я могу улучшить то, что я делаю?
Стоит отметить, что значения внутри matr берутся из набора ~ 30000 значений, и у меня есть полный набор. Я рассмотрел решения, в которых я определяю эти 30000 значений для каждого вектора и использую их для преобразования в True / False по всей матрице перед простым суммированием по строке. Я не уверен, поможет ли это.