【问题标题】:Efficient way to create dictionary of symmetric matrix with colum-row pair as key, and corresponding value in matrix as value以列-行对为键,以矩阵中的对应值为值创建对称矩阵字典的有效方法
【发布时间】:2020-09-04 02:39:54
【问题描述】:

我想创建一个形式为 (row, column): value 的字典,来自如下所示的对称矩阵(如距离矩阵),不考虑 NaN 值或零(零是对角线) .该矩阵是一个熊猫数据框。

Material  100051    100120    100138    100179    100253    100265    100281                                                                         
100051       0.0  0.953488  0.959302  0.953488  0.959302  0.953488  0.953488   
100120       NaN  0.000000  0.965116  0.953488  0.959302  0.959302  0.959302   
100138       NaN       NaN  0.000000  0.959302  0.970930  0.970930  0.970930   
100179       NaN       NaN       NaN  0.000000  0.959302  0.953488  0.953488   
100253       NaN       NaN       NaN       NaN  0.000000  0.976744  0.976744   
...          ...       ...       ...       ...       ...       ...       ... 

所以字典看起来像:

{((100120, 100051): 0.953488); ((1000138, 100051): 0.959302); ....}

要创建字典,您可能可以遍历行和列,例如:

jacsim_values = {}
for i in jacsim_matrix2:
    for j in jacsim_matrix2:
        if jacsim_matrix[i][j] != 0:
            jacsim_values[i,j] = jacsim_matrix2[i][j]

但我正在寻找更有效的方法。这需要相当长的时间来确定矩阵的大小。但是,我找不到如何做到这一点。有没有人可以帮帮我?

【问题讨论】:

    标签: pandas dataframe dictionary matrix symmetric


    【解决方案1】:

    IIUC, DataFrame.stack (row, column)DataFrame.unstack (column, row) + DataFrame.to_dict

    df.set_index('Material').rename(int, axis=1).unstack().to_dict()
    

    {(100051, 100051): 0.0,
     (100051, 100120): nan,
     (100051, 100138): nan,
     (100051, 100179): nan,
     (100051, 100253): nan,
     (100120, 100051): 0.9534879999999999,
     (100120, 100120): 0.0,
     (100120, 100138): nan,
     (100120, 100179): nan,
     (100120, 100253): nan,
     (100138, 100051): 0.9593020000000001,
     (100138, 100120): 0.965116,
     (100138, 100138): 0.0,
     (100138, 100179): nan,
     (100138, 100253): nan,
     (100179, 100051): 0.9534879999999999,
     (100179, 100120): 0.9534879999999999,
     (100179, 100138): 0.9593020000000001,
     (100179, 100179): 0.0,
     (100179, 100253): nan,
     (100253, 100051): 0.9593020000000001,
     (100253, 100120): 0.9593020000000001,
     (100253, 100138): 0.97093,
     (100253, 100179): 0.9593020000000001,
     (100253, 100253): 0.0,
     (100265, 100051): 0.9534879999999999,
     (100265, 100120): 0.9593020000000001,
     (100265, 100138): 0.97093,
     (100265, 100179): 0.9534879999999999,
     (100265, 100253): 0.9767440000000001,
     (100281, 100051): 0.9534879999999999,
     (100281, 100120): 0.9593020000000001,
     (100281, 100138): 0.97093,
     (100281, 100179): 0.9534879999999999,
     (100281, 100253): 0.9767440000000001}
    

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 2018-05-09
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 2014-06-17
      相关资源
      最近更新 更多