首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何按列对nx3 numpy数组进行排序,但它会记住该行中的数据?

如何按列对nx3 numpy数组进行排序,但它会记住该行中的数据?
EN

Stack Overflow用户
提问于 2019-08-13 17:22:50
回答 3查看 83关注 0票数 0

首先,我是python的新手,所以我非常感谢任何提示/帮助。

从本质上讲,我希望nx3 numpy数组首先按第二列排序,然后按第三列排序,但我希望该行中的所有数据彼此保持一致。

如下所示:

代码语言:javascript
运行
复制
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坐标?

所以在排序之后,它看起来是这样的:

代码语言:javascript
运行
复制
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坐标都彼此保持在同一行上。

EN

回答 3

Stack Overflow用户

发布于 2019-08-13 17:33:35

最简单的方法是将其转换为pandas数据帧,这样就更容易操作它。

代码语言:javascript
运行
复制
import pandas as pd

df = pd.DataFrame({'a': [6, 2, 1], 'b': [4, 5, 6]})

print(df)

输出

代码语言:javascript
运行
复制
 a  b
0  6  4
1  2  5
2  1  6

sorteddf = df.sort_values(by='a')

print(sorteddf)

输出

代码语言:javascript
运行
复制
a  b
2  1  6
1  2  5
0  6  4
票数 0
EN

Stack Overflow用户

发布于 2019-08-13 17:38:27

看一下'order‘参数:https://docs.scipy.org/doc/numpy/reference/generated/numpy.sort.html

代码语言:javascript
运行
复制
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']))
票数 0
EN

Stack Overflow用户

发布于 2019-08-13 17:50:47

最简单的方法是先按y排序,然后再按x排序,因此对于等于x的值,最终结果将按y排序。

完整代码:

代码语言:javascript
运行
复制
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

结果

代码语言:javascript
运行
复制
a
array([[ 4,  1,  3],
       [25,  1,  5],
       [ 2,  2,  3],
       [20,  2,  4],
       [ 7,  5,  6],
       [ 3,  5,  8]])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57474739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档