所以我试图在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),然后是DESCENDING中的SECOND元素。而且我需要在ASCENDING命令的FIRST元素上打破所有关系。
所以这最终会成为
[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表示法。
先谢谢大家。
答案 0 :(得分:0)
鉴于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应该可以解决问题。