我有这个名为 v 的 dtype('float64') 数组:
array([[ 9.33350000e+05, 8.75886500e+06, 3.45765000e+02],
[ 4.33350000e+05, 8.75886500e+06, 6.19200000e+00],
[ 1.33360000e+05, 8.75886500e+06, 6.76650000e+02]])
...这是我使用 np.loadtxt 命令从文件中获取的。我想在第一列的值之后对其进行排序,而不会混淆将同一行上列出的数字放在一起的结构。使用 v.sort(axis=0) 给我:
array([[ 1.33360000e+05, 8.75886500e+06, 6.19200000e+00],
[ 4.33350000e+05, 8.75886500e+06, 3.45765000e+02],
[ 9.33350000e+05, 8.75886500e+06, 6.76650000e+02]])
...即将第三列的最小数字放在第一行等。我宁愿想要这样的东西...
array([[ 1.33360000e+05, 8.75886500e+06, 6.76650000e+02],
[ 4.33350000e+05, 8.75886500e+06, 6.19200000e+00],
[ 9.33350000e+05, 8.75886500e+06, 3.45765000e+02]])
...每行的元素没有相对移动。
最佳答案
尝试
v[v[:,0].argsort()]
(v
是数组)。 v[:,0]
是第一列,.argsort()
返回对第一列进行排序的索引。然后使用高级索引将此排序应用于整个数组。请注意,您将获得数组的排序副本。
我知道的就地排序数组的唯一方法是使用记录数据类型:
v.dtype = [("x", float), ("y", float), ("z", float)]
v.shape = v.size
v.sort(order="x")
关于Python (Numpy) 数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047407/