如何在 numpy/scipy/pandas 中生成匹配的 matrix/array?
How can I generate a matching matrix/array in numpy/scipy/pandas?
我需要一个布尔数组来指示 list/Series 中的项目是否与同一数组中的其他项目匹配。如果我知道如何称呼它,这可能是一个 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 处的 'red' 与索引 3 和 4 处的其他 'red' 相匹配。是否有库函数可以更有效地执行此操作?
如果您可以将类别转换为索引或数字,广播会为您完成一切
c_num = np.array([0,1,2,0,0,3]) # mimic colors
match_array = c_num[:,None] == c_num
结果相同。
我需要一个布尔数组来指示 list/Series 中的项目是否与同一数组中的其他项目匹配。如果我知道如何称呼它,这可能是一个 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 处的 'red' 与索引 3 和 4 处的其他 'red' 相匹配。是否有库函数可以更有效地执行此操作?
如果您可以将类别转换为索引或数字,广播会为您完成一切
c_num = np.array([0,1,2,0,0,3]) # mimic colors
match_array = c_num[:,None] == c_num
结果相同。