【问题标题】:How can I generate a matching matrix/array in numpy/scipy/pandas?如何在 numpy/scipy/pandas 中生成匹配的矩阵/数组?
【发布时间】:2018-10-10 00:31:47
【问题描述】:

我需要一个布尔数组来指示列表/系列中的项目是否与同一数组中的其他项目匹配。如果我知道该怎么称呼它,这可能是一个单一的 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 处的其他“红色”匹配。有没有一个库函数可以更有效地做到这一点?

【问题讨论】:

    标签: python numpy scipy numpy-ndarray


    【解决方案1】:

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

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

    给出相同的结果。

    【讨论】:

    • 字符串类型的数组可以做到这一点,所以只需np.array(colors)
    猜你喜欢
    • 2016-12-28
    • 1970-01-01
    • 2016-02-01
    • 2016-11-19
    • 1970-01-01
    • 2014-12-21
    • 2016-11-24
    • 2013-10-12
    • 2012-06-04
    相关资源
    最近更新 更多