按行按最小值对矩阵进行排序

时间:2017-11-03 16:20:17

标签: python numpy matrix

我有一些矩阵和操作,我最终得到一个名为" 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排序算法不起作用。我该怎么办?

2 个答案:

答案 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列中提取索引。