我需要一个布尔数组,指示列表/系列中的项是否与同一数组中的其他项匹配。如果我知道该怎么称呼它,这可能是一个单一的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处的另一个“红色”相匹配。是否有可以更有效地执行此操作的库函数?
答案 0 :(得分:1)
如果您可以将类别转换为索引或数字,则广播会为您完成所有事情
c_num = np.array([0,1,2,0,0,3]) # mimic colors
match_array = c_num[:,None] == c_num
给出相同的结果。