我想按照其第一列编号的顺序对numpy矩阵进行排序(命令必须移动此列的每个元素的所有行),我尝试使用" argsort()&#34 ;命令,但是当数字大于9时,它不能很好地工作,因为它只适用于每个元素的第一个数字,例如对于下面的numpy矩阵:
1.1 ....... ........ .......
1.2 ....... ........ .......
1.3 ....... ........ .......
2.1 ....... ........ .......
2.2 ....... ........ .......
2.3 ....... ........ .......
3.1 ....... ........ .......
3.2 ....... ........ .......
3.3 ....... ........ .......
6.1 ....... ........ .......
6.2 ....... ........ .......
6.3 ....... ........ .......
8.1 ....... ........ .......
8.2 ....... ........ .......
8.3 ....... ........ .......
5.1 ....... ........ .......
5.2 ....... ........ .......
5.3 ....... ........ .......
4.1 ....... ........ .......
4.2 ....... ........ .......
4.3 ....... ........ .......
12.1 ....... ........ .......
12.2 ....... ........ .......
12.3 ....... ........ .......
11.1 ....... ........ .......
11.2 ....... ........ .......
11.3 ....... ........ .......
10.1 ....... ........ .......
10.2 ....... ........ .......
10.3 ....... ........ .......
9.1 ....... ........ .......
9.2 ....... ........ .......
9.3 ....... ........ .......
7.1 ....... ........ .......
7.2 ....... ........ .......
cjarray.sort=cjarray[cjarray[:, 0].argsort()]
1.1 ....... ........ .......
1.2 ....... ........ .......
1.3 ....... ........ .......
10.1 ....... ........ .......
10.2 ....... ........ .......
10.3 ....... ........ .......
11.1 ....... ........ .......
11.2 ....... ........ .......
11.3 ....... ........ .......
12.1 ....... ........ .......
12.2 ....... ........ .......
12.3 ....... ........ .......
2.1 ....... ........ .......
2.2 ....... ........ .......
2.3 ....... ........ .......
3.1 ....... ........ .......
3.2 ....... ........ .......
3.3 ....... ........ .......
4.1 ....... ........ .......
4.2 ....... ........ .......
4.3 ....... ........ .......
5.1 ....... ........ .......
5.2 ....... ........ .......
5.3 ....... ........ .......
6.1 ....... ........ .......
6.2 ....... ........ .......
6.3 ....... ........ .......
7.1 ....... ........ .......
7.2 ....... ........ .......
7.3 ....... ........ .......
8.1 ....... ........ .......
8.2 ....... ........ .......
8.3 ....... ........ .......
9.1 ....... ........ .......
9.2 ....... ........ .......
正如你所看到的,矩阵从1.3跳到10.1,因为命令只关心第一个数字,有人可以伸出援手。
非常感谢!
答案 0 :(得分:1)
您应该argsort()
仅列出您想要排序矩阵的列,并使用生成的索引来排序矩阵。演示:
>>> a=np.array([[12,2,3,4],[22,1,3,5],[4,1,6,7],[15,1,2,7]])
>>> a
array([[12, 2, 3, 4],
[22, 1, 3, 5],
[ 4, 1, 6, 7],
[15, 1, 2, 7]])
>>> a[a[:,0].argsort()]
array([[ 4, 1, 6, 7],
[12, 2, 3, 4],
[15, 1, 2, 7],
[22, 1, 3, 5]])
答案 1 :(得分:0)
这是我用了很长时间来模拟MATLAB sortrows
的原因。 Tbh .argsort
似乎更有吸引力,应该可以正常工作。几年前它无法使用。
def sortrows(data):
"""assumes data to be numpy.ndarray"""
data = np.ascontinuousarray(data)
return np.sort(
data.view(['', data.dtype] * data.shape[1]), axis=0
).view(data.dtype)