python - 如何在 numpy/scipy/pandas 中生成匹配的矩阵/数组?

标签 python numpy scipy numpy-ndarray

我需要一个 bool 数组来指示列表/系列中的项目是否与同一数组中的其他项目匹配。如果我知道该怎么调用它,这可能是一个单一的 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 处的其他“红色”相匹配。是否有库函数可以更有效地完成此操作?

最佳答案

如果您可以将类别转换为索引或数字,那么广播将为您完成一切

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

给出了相同的结果。

关于python - 如何在 numpy/scipy/pandas 中生成匹配的矩阵/数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50091588/

相关文章:

python - 值错误 : cannot set toolkit to wx because it has already been set to qt4

python - Pandas - 根据另一个列表中的索引对列表中的值求和

python - 高效计算多个张量内积

python - to_dict() 在值周围创建括号

python - pandas 根据另一列中的序列重复创建类别列

python - Python 和 Numpy 中自定义 NaN float 的行为

python - python中数学函数的优化和加速

python - 行级操作有时仅在 Numpy 中有效

python - interp2(V,k) 从 Matlab 到 Python

python - Pytorch Argrelmax 函数(或 C++)