如何按第n列对NumPy中的数组排序?
例如,
a = array([[9, 2, 3],
[4, 5, 6],
[7, 0, 5]])
我想按第二列对行进行排序,以便返回:
array([[7, 0, 5],
[9, 2, 3],
[4, 5, 6]])
对于“正确”的方式,请参见numpy.ndarray.sort
的order
关键字参数。
但是,你需要将数组视为具有字段的数组(结构化数组)。
如果你最初没有使用字段定义数组,那么“正确”的方法将非常丑陋。
作为一个简单的示例,对其进行排序并返回副本:
In [1]: import numpy as np
In [2]: a = np.array([[1,2,3],[4,5,6],[0,0,1]])
In [3]: np.sort(a.view('i8,i8,i8'), order=['f1'], axis=0).view(np.int)
Out[3]:
array([[0, 0, 1],
[1, 2, 3],
[4, 5, 6]])
对其进行原位排序:
In [6]: a.view('i8,i8,i8').sort(order=['f1'], axis=0) #<-- returns None
In [7]: a
Out[7]:
array([[0, 0, 1],
[1, 2, 3],
[4, 5, 6]])
据我所知,@ Steve
确实是最优雅的方式…
此方法的唯一优点是,“ order”
参数是用于排序搜索依据的字段列表。例如,你可以通过提供order = ['f1','f2','f0']
来对第二列,第三列,第一列进行排序。
问题内容: 我有一个关于如何按给定列对整个数组/ recarray排序的简单问题。例如,给定数组: 我想按第一列排序数据以返回: 问题答案: 使用,其中是要排序的列索引:
问题内容: 我有一个形状为(N,2)的2D numpy数组,其中包含N个点(x和y坐标)。例如: 我想对它进行排序,以使我的点按x坐标排序,然后在x坐标相同的情况下按y排序。因此,上面的数组应如下所示: 如果这是正常的Python列表,我将简单地定义一个比较器来执行我想要的操作,但是据我所知,numpy的sort函数不接受用户定义的比较器。有任何想法吗? 编辑:感谢您的想法!我建立了一个具有100
问题内容: 请原谅我这是多余的还是超基本的。我要从R进入Python / Numpy,并且很难在脑海里翻转事物。 我有一个维数组,我想使用索引值的另一个n维数组进行排序。我知道我可以将其包装成一个循环,但是似乎应该有一种非常简洁的Numpyonic方式将其击败并提交。这是设置n = 2的问题的示例代码: 所以现在我有一个2 x 5的随机数数组和2 x 5的索引。我已经阅读了约10次帮助,但显然我的
问题内容: 有没有办法将numpy 2D数组中的列顺序更改为新的任意顺序?例如,我有一个数组 我想将其更改为 通过应用排列 在列上。因此,在新矩阵中,我希望将原始文档的第一列保留在原位置,将第二列移至最后一列,依此类推。 有一个numpy函数可以做到吗?我有一个相当大的矩阵,并且希望得到更大的矩阵,因此我需要一个可以在可能的情况下快速且适当地执行此操作的解决方案(置换矩阵是不可行的) 谢谢。 问题
问题内容: 我在创建numpy数组的numpy数组时遇到问题。我将在一个循环中创建它: 所需结果: 实际结果: 可能吗?我不知道数组的最终尺寸,因此无法使用固定尺寸对其进行初始化。 问题答案: 永远不要在循环中追加数组:与基本的Python相比,这是NumPy非常不擅长的一项操作。这是因为您要对每个数据进行完整复制,这将花费您二次时间。 相反,只需将您的数组附加到Python列表中,并在最后进行转
问题内容: 请我有点Python陌生,感觉很好,我可以说python很性感,直到我需要移动4x4矩阵的内容,我想在构建游戏的2048游戏演示时使用它,在这里,我有这个功能 如果你这样调用它,这就是函数的作用 它将覆盖左侧的零并产生 请让我帮助某人,以numpy达到更快的速度并且需要更少的代码(我在深度优先搜索算法中使用的代码),更重要的是cover_up,cover_down和 问题答案: 这里有