首先,我是python的新手,所以我非常感谢任何提示/帮助。
从本质上讲,我希望nx3 numpy数组首先按第二列排序,然后按第三列排序,但我希望该行中的所有数据彼此保持一致。
如下所示:
import numpy as np
a = np.array([[20, 2, 4],
[7, 5, 6],
[25, 1, 5],
[2, 2, 3],
[3, 5, 8],
[4, 1, 3]])
......... (n times)在此数组中,第一列表示值,第二列表示x坐标,第三列表示y坐标。最好的方法是先按x坐标对数组进行降序排序,然后在y坐标上进行降序排序,同时仍将值分配给x和y坐标?
所以在排序之后,它看起来是这样的:
a = ([[4, 1, 3],
[25, 1, 5],
[2, 2, 3],
[20, 2, 4],
[7, 5, 6],
[3, 5, 8]])
......... (n times)你可以看到,它如何首先对x坐标进行排序,然后对所有x坐标相同的y坐标进行排序。因为它首先找到所有x坐标为1,然后在该排序中找到y坐标。而值、x和y坐标都彼此保持在同一行上。
发布于 2019-08-13 17:33:35
最简单的方法是将其转换为pandas数据帧,这样就更容易操作它。
import pandas as pd
df = pd.DataFrame({'a': [6, 2, 1], 'b': [4, 5, 6]})
print(df)输出
a b
0 6 4
1 2 5
2 1 6
sorteddf = df.sort_values(by='a')
print(sorteddf)输出
a b
2 1 6
1 2 5
0 6 4发布于 2019-08-13 17:38:27
看一下'order‘参数:https://docs.scipy.org/doc/numpy/reference/generated/numpy.sort.html
import numpy as np
dtype = [('x',int),('y',int)]
values = [(1,7),(3,4),(1,4),(1,3)]
a = np.array(values,dtype=dtype)
print(np.sort(a, order=['x','y']))发布于 2019-08-13 17:50:47
最简单的方法是先按y排序,然后再按x排序,因此对于等于x的值,最终结果将按y排序。
完整代码:
import numpy as np
a = np.array([[20, 2, 4],
[7, 5, 6],
[25, 1, 5],
[2, 2, 3],
[3, 5, 8],
[4, 1, 3]])
a = a[a[:,2].argsort()] # sort according to column 2
a = a[a[:,1].argsort()] # sort according to column 1结果
a
array([[ 4, 1, 3],
[25, 1, 5],
[ 2, 2, 3],
[20, 2, 4],
[ 7, 5, 6],
[ 3, 5, 8]])https://stackoverflow.com/questions/57474739
复制相似问题