我有一些矩阵和操作,我最终得到一个名为" MatrizFinal"的矩阵,它有一个数字,然后是一个从0到n的id。我想对矩阵进行排序,以便按行的最小值(不是ID)对行进行排序(因为我稍后会采用最小值,所以我需要id。
*result = std::make_pair(first2->first, first2->second * -1);
输出最终矩阵是:
import numpy as np
v1=np.matrix('1,2;3,4;2,6;4,5')
v2=np.matrix('5,6;7,8;1,2;3,4')
print('first matrix')
print(v1)
print('second matrix:')
print(v2)
k=0
distancias = []
posiciones=[]
#do the euclidean distance and also add the position from 0 to n, depending on the rows it has.
for i in v1:
distancias.append(np.linalg.norm(v2-v1[k,:]))
posiciones.append(k)
print(distancias[k])
k=k+1
print(distancias)
print (posiciones)
#create a matrix that has both columns
matrizFinal=np.column_stack((distancias, posiciones))
print (matrizFinal)
但我想订购从最小值到最大值的行。在这个例子中,我想要的结果是:
[[ 10.58300524 0. ]
[ 6.92820323 1. ]
[ 7.74596669 2. ]
[ 6.32455532 3. ]]
但是numpy排序算法不起作用。我该怎么办?
答案 0 :(得分:1)
我刚试过它,它在Python 3.6.1中工作正常
M = np.matrix(sorted(matrizFinal, key=lambda x: x[0]))
我很确定有更好(更快)的方法,但这是我想到的第一个。
Suerte!
编辑:对不起,我不明白你的问题,但4x4矩阵帮助了我。现在我觉得它符合你的预期。
答案 1 :(得分:0)
我使用你在问题中提到的numpy排序时遇到了同样的问题,其中每列不会与其他列相关。为了解决这个问题,我们可以找到要排序的列的索引,然后应用于所有列。
一个笨拙的解决方案:
>>> matrizFinal[np.argsort(matrizFinal, axis=0)[:,0]]
>>> array([[ 6.32455532 , 3. ],
[ 6.92820323 , 1. ],
[ 7.74596669 , 2. ],
[ 10.58300524 , 0. ]])
其中[:,0]从第0列中提取索引。