python - 在python中对矩阵的值进行排序

标签 python dictionary numpy matrix

我目前的情况是:

dict={'A':[1,2,3], 'B':[2,5,4], 'C':[2,1,8]}
N=len(keys)
m=numpy.zeros(N,N)
for i in range(N):
    for j in range(N):
         m[i-1,j-1]=covariance(values[i-1],values[j-1])
         m[j-1,i-1]=covariance(values[j-1],values[i-1])
m=numpy.triu(m)

这给了我:

1   0.639  0.07
0     1    0.51
0     0      1

我还没有列名或行名。我想要这样的东西:

       A     B      C
A      1   0.639  0.07
B      0     1    0.51
C      0     0      1

给定这个矩阵,我想按矩阵的值降序排序,所以我想要的输出是:

A & A: 1
B & B: 1
C & C: 1
A & B: 0.639
B & C: 0.51
A & C: 0.07
B & A: 0 #etc

希望将输出保存到 csv 文件中,其中第一列是姓名,第二列是相应的分数

感谢阅读。

最佳答案

调用 np.sort 并将 axis 关键字参数设置为 None,然后通过切片反转它:

>>> a = np.array([[1, 0.639, 0.07], [0, 1, 0.51], [0, 0, 1]])
>>> a
array([[ 1.   ,  0.639,  0.07 ],
       [ 0.   ,  1.   ,  0.51 ],
       [ 0.   ,  0.   ,  1.   ]])
>>> np.sort(a, axis=None)[::-1]
array([ 1.   ,  1.   ,  1.   ,  0.639,  0.51 ,  0.07 ,  0.   ,  0.   ,  0.   ])

如果您想知道每个值的来源,请先使用 np.argsort,然后解开扁平化索引:

>>> idx = np.argsort(a, axis=None)[::-1]
>>> rows, cols = np.unravel_index(idx, a.shape)
>>> a_sorted = a[rows, cols]
>>> for r, c, v in zip(rows, cols, a_sorted):
...     print 'ABC'[r], '&', 'ABC'[c], ':', v
... 
C & C : 1.0
B & B : 1.0
A & A : 1.0
A & B : 0.639
B & C : 0.51
A & C : 0.07
C & B : 0.0
C & A : 0.0
B & A : 0.0

关于python - 在python中对矩阵的值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21922806/

相关文章:

python - Django 模型表单集 - 修改表单标签和默认值

python - 测试 REST API

python - python manager dict 会自动锁定它的值吗?

python - 使用 Groupby 识别 Pandas Dataframe 中连续的相同值

python - pysnmp 示例程序中的 asyncio "Task was destroyed but it is pending!"

python - 命名一些使用 IronPython 和 Silverlight 编写的重要站点

python - 如何避免 "RuntimeError: dictionary changed size during iteration"或在没有 .pop() 的情况下获得结果

python - 将列表列表转换为嵌套字典

Python VTK : Coordinates directly to PolyData

python - 将 lambda 表达式应用于数组元素时出现 ValueError