如何在python中对二维数组进行排序

2024-09-30 14:15:52 发布

您现在位置:Python中文网/ 问答频道 /正文

Tool = [[0 for x in xrange(3)] for y in xrange(len(xTool)-1)]
for l in xrange((len(xTool) - 1)):
  Tool[l][0] = yTool[l]; Tool[l][1] = xTool[l]; Tool[l][2] = zTool[l]  

我从点坐标开始,它在3个列表(xTool、yTool、zTool)中,分别表示我所有点的x、y和z坐标。在

这里的目标是创建一个由3列和多行(超过10000行)组成的矩阵,其中每行代表点的3个坐标。下一步我要做的是这样的向量转换:(只有当你真的想理解我在做什么的时候,这才是次要的

^{pr2}$

最后,我要做的是对我的第二个专栏([1])排序rTool。例如,我打印了5个rTool条目。根据第2列对它们进行排序,最后一行应该是第一行。我真的很难做到这一点,我怀疑这是因为我有元组,而不是一个真正的3列数学矩阵。在

[[ -584.89837646 -3648.6472168    402.177948  ]
 [ -542.8659668  -3663.34545898   405.76959229]
 [ -500.831604   -3678.04785156   409.32122803]
 [ -458.79336548 -3692.75854492   412.7930603 ]
 [ -416.74984741 -3637.48022461   416.15090942]]

请不要犹豫要求澄清,我希望你能帮助我!谢谢。在


Tags: in目标列表forlen排序代表矩阵
3条回答

首先也是最重要的一点是,学习纽姆。用纯python做这种事情违背了python的一切。在

一旦你做到了:

sorted_rtool = rTool[np.argsort(rTool[:,1])]

要让numpy回家的重要性:

^{pr2}$

不仅干净了很多,而且速度也快了一个数量级。在

您可以使用'sort'或'sorted'的'key'参数,请参见https://wiki.python.org/moin/HowTo/Sorting#Key_Functions

在您的情况下:

rTool.sort(key=lambda x: x[1])

或者

^{pr2}$

您正在寻找list.sort()key关键字(或内置的sorted()),请看Key Functions部分{a1}。在

通常人们只使用lambda函数作为sort键,因为它很简洁,而且通常不会多次使用sort函数。它只是一个函数,它返回一个对象key,列表中的每个元素都在这个对象上排序。在

所以你可以:

def keyFunc(element):
  return element[1]

rTool.sort(key=keyFunc)

或者:

^{pr2}$

在这两种情况下,都可以使用rTool = sorted(rTool, key=...),区别在于list.sort()执行就地排序,如果不需要原始数组,则效率更高。在

key函数可以是您想要的任何东西,前提是它返回其他可以排序的对象,因此如果您的点是具有x, y, z属性的对象,那么您可以执行rTool.sort(key x: x.y)

相关问题 更多 >

    热门问题