从对列表中制作 Numpy 对称矩阵

Jon*_*han 4 python numpy matrix

我有一个相关矩阵,但指定为对,例如:

cm = pd.DataFrame({'name1': ['A', 'A', 'B'], 
                   'name2': ['B', 'C', 'C'], 
                   'corr': [0.1, 0.2, 0.3]})
cm
    name1   name2   corr
0   A       B       0.1
1   A       C       0.2
2   B       C       0.3
Run Code Online (Sandbox Code Playgroud)

将它变成一个 numpy 二维数组相关矩阵的最简单方法是什么?

    A   B   C
A 1.0 0.1 0.2
B 0.1 1.0 0.3
C 0.2 0.3 1.0
Run Code Online (Sandbox Code Playgroud)

Qua*_*ang 6

不确定,pure numpy因为您正在处理熊猫数据框。这是一个纯熊猫解决方案:

s = cm.pivot(*cm)

ret = s.add(s.T, fill_value=0).fillna(1)
Run Code Online (Sandbox Code Playgroud)

输出:

     A    B    C
A  1.0  0.1  0.2
B  0.1  1.0  0.3
C  0.2  0.3  1.0
Run Code Online (Sandbox Code Playgroud)

额外:对于反向(ret如上)

(ret.where(np.triu(np.ones(ret.shape, dtype=bool),1))
    .stack()
    .reset_index(name='corr')
)
Run Code Online (Sandbox Code Playgroud)

输出:

  level_0 level_1  corr
0       A       B   0.1
1       A       C   0.2
2       B       C   0.3
Run Code Online (Sandbox Code Playgroud)