首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中对x,y坐标的多维数组进行排序

问在python中对x,y坐标的多维数组进行排序
EN

Stack Overflow用户
提问于 2016-04-12 12:53:27
回答 1查看 590关注 0票数 1

所以我尝试在python中对元素的多维数组进行排序。数组是一堆乱七八糟的东西,这让它变得如此困难,但不幸的是,这正是opencv函数返回的内容。

这些是y,x坐标(向后我知道....)

代码语言:javascript
复制
[array([[[ 13, 178]],[[ 50, 179]],[[ 49, 258]],[[ 12, 257]]]), 
array([[[ 58,  93]],[[105,  94]],[[104, 171]],[[ 57, 170]]]), 
array([[[ 13,  93]],[[ 50,  94]],[[ 49, 171]],[[ 12, 170]]]), 
array([[[ 58,   9]],[[105,  10]],[[104,  86]],[[ 57,  85]]]), 
array([[[13,  9]], [[50, 10]],[[49, 86]],[[12, 85]]]), 
array([[[ 58, 178]],[[105, 179]],[[104, 257]],[[ 57, 257]]])]

现在我需要的排序方式是按照每个numpy数组的第一个元素(让我们称它为a),然后是降序中的a的第二个元素。我需要在a的第一个元素上按升序打破所有的平局。

所以这最终会是

代码语言:javascript
复制
[array([[[ 13, 178]],[[ 50, 179]],[[ 49, 258]],[[ 12, 257]]]),
array([[[ 58, 178]],[[105, 179]],[[104, 257]],[[ 57, 257]]]),
array([[[ 13,  93]],[[ 50,  94]],[[ 49, 171]],[[ 12, 170]]]),
array([[[ 58,  93]],[[105,  94]],[[104, 171]],[[ 57, 170]]]),
array([[[13,  9]], [[50, 10]],[[49, 86]],[[12, 85]]]),
array([[[ 58,   9]],[[105,  10]],[[104,  86]],[[ 57,  85]]])]

现在,我已经了解了如何使用

代码语言:javascript
复制
items[each][first][0][Y_POS(or X_POS)]

其中每个是要访问的nparray (有6个),Y_POS是指y位置,X_POS是指x位置。

另外两个变量first和0永远不会改变。

我真的不知道从哪里开始让它高效运行,所以任何帮助都是非常感谢的。请记住,坐标采用Y,X表示法。

提前感谢大家。

EN

回答 1

Stack Overflow用户

发布于 2016-04-12 14:08:18

假设A是包含所有数据的4d数组:

代码语言:javascript
复制
I = np.argsort(A[:, 0, 0, 0])
A = A[I[::-1]]
I = np.argsort(A[:, 0, 0, 1], kind='mergesort')
A = A[I[::-1]]

首先我们按逆序对Y排序,然后也按逆序对X排序,当X相等时,结果是X按降序排列,而Y按升序排列。请注意,我们必须使用稳定的排序算法来防止第一次排序的结果被打乱;mergesort应该可以做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36563886

复制
相关文章

相似问题

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