Как я могу создать соответствующую матрицу / массив в numpy / scipy / pandas? - PullRequest
0 голосов
/ 30 апреля 2018

Мне нужен логический массив, который указывает, соответствует ли элемент в списке / серии друг другу в одном и том же массиве. Вероятно, это единственная функция scipy, если бы я знал, как ее назвать, но мои поиски не были плодотворными. Следующий код делает то, что мне нужно, но, вероятно, выиграет от векторизации.

import numpy as np

colors = ['red', 'green', 'blue', 'red', 'red', 'yellow']
match_array = np.ndarray((len(colors), len(colors)), dtype=bool)

for i, y in enumerate(colors):
    for j, x in enumerate(colors):
        match_array[i][j] = (x == y)

print(match_array)

Выход:

[[ True False False  True  True False]
 [False  True False False False False]
 [False False  True False False False]
 [ True False False  True  True False]
 [ True False False  True  True False]
 [False False False False False  True]]

Это симметрично относительно диагонали, как и ожидалось, и совпадает с «красным» в индексе 0 с другими «красными» в индексах 3 и 4 по обеим осям. Есть ли доступная библиотечная функция для более эффективной работы?

1 Ответ

0 голосов
/ 30 апреля 2018

Если вы можете преобразовать свои категории в индексы или что-то в цифровом формате, радиовещание сделает все за вас

c_num = np.array([0,1,2,0,0,3])  # mimic colors
match_array = c_num[:,None] == c_num

, который дает тот же результат.

...