所以我尝试在python中对元素的多维数组进行排序。数组是一堆乱七八糟的东西,这让它变得如此困难,但不幸的是,这正是opencv函数返回的内容。
这些是y,x坐标(向后我知道....)
[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的第一个元素上按升序打破所有的平局。
所以这最终会是
[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]]])]
现在,我已经了解了如何使用
items[each][first][0][Y_POS(or X_POS)]
其中每个是要访问的nparray (有6个),Y_POS是指y位置,X_POS是指x位置。
另外两个变量first和0永远不会改变。
我真的不知道从哪里开始让它高效运行,所以任何帮助都是非常感谢的。请记住,坐标采用Y,X表示法。
提前感谢大家。
发布于 2016-04-12 06:08:18
假设A是包含所有数据的4d数组:
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应该可以做到这一点。
https://stackoverflow.com/questions/36563886
复制