到目前为止我所拥有的是:
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文件中,其中第一列是名称,第二列是相应的分数
感谢阅读。
答案 0 :(得分:2)
在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
答案 1 :(得分:1)
从numpy数组开始,如下所示:
matrix = numpy.array( [ [ 1, 0.639, 0.07 ],
[ 0, 1, 0.51 ],
[ 0, 0, 1 ] ] )
你可以这样做:
indices = ["A", "B", "C", ]
values = []
for r,row in enumerate( matrix ):
for c, cell in enumerate( row ):
values.append( ("{} & {}".format( indices[r], indices[c] ), cell ) )
values.sort( key=lambda it: (-it[1], it[0]) )
for k,v in values:
print "{}: {}".format(k,v)
输出:
A & A: 1.0
B & B: 1.0
C & C: 1.0
A & B: 0.639
B & C: 0.51
A & C: 0.07
B & A: 0.0
C & A: 0.0
C & B: 0.0