以列-行对为键,以矩阵中的对应值为值创建对称矩阵字典的有效方法

凯拉

我想以 (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]

但我正在寻找更有效的东西。对于矩阵的大小,这需要相当长的时间。但是,我找不到如何执行此操作。有人可以帮我吗?

安塞夫

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}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

numpy中的每列矩阵索引有效

有什么更有效的方法来计算矩阵中除其自身列以外的每一行的最大值?

在scipy.sparse矩阵中访问行/列中非零值的最有效方法

列表的字典中的DataFrame,其中列值为键

确定稀疏矩阵中哪些行(或列)具有值

有效地从矩阵中逐列减去

如何在2D矩阵中删除值为0的前n列/行?

逻辑矩阵如何有效查找具有真实值的行/列

对大型稀疏矩阵的每一行中的每k列求和的有效方法

从带有列表项(其中列表元素为键)的pandas列创建字典的有效方法

将特定列名存储为键,将列数据存储为字典中的值

为熊猫中的所有列生成列矩阵

遍历df列列表并用字典中的值有效替换现有键python

R中矩阵的有效子集和列求和

无法为空矩阵中的第7列和第7行分配值

R:在for循环中为矩阵行/列命名在控制台中有效,但在编织时无效

如何在python中为列创建转换矩阵?

基于嵌套的if条件创建新列并比较R中列表中的值的有效方法

将具有{1,...,K}中的值的列向量转换为相应列中值为1的K列矩阵

从行,列,值的列表中填写矩阵

numpy:为矩阵的每一列选择特定行的值

选择行中具有最少NaN值的矩阵的列

Pandas:检查 A 列中的值是否在 B 列中的值列表中的有效方法

创建对称矩阵的有效方法,计算两个字符串属于同一列表的频率

最大值:将矩阵的列定义为向量

python中是否有一种有效的方法可以将矩阵中的每一列与同一矩阵中的所有列相乘?

将多列分组为键:熊猫中的值字典

将字典列扩展为具有字典键和字典值的行作为熊猫中的新列值

在python中将列值分组为稀疏矩阵