[英]Sort three dimensional numpy array with two axes sorting constraints
我有一個三維numpy數組,我想排序。
數組的一個例子由下式給出:
arr = numpy.array([[4., 5., .1], [-2., 5., .3], [-1., -3., .2], [5, -4, .1], [2., 2., .25], [-2., 0., .1], [-1.5, 0., .1], [1., -3., .1], [-2., 8, .1]])
為方便起見,分別稱為x
, y
和z
三維。 我想基於y
的值按降序排序我的數組。 我知道我可以做到這一點
arr[arr[:, 1].argsort()[::-1]]
但是,第二個約束是,對於同一y
值的多次出現,我希望以增加的值對x
進行排序。 x
和y
的值都可以是負數。
我嘗試先沿x排序,然后沿着y排序,希望x順序保持不變。 不幸的是,這種情況並非如此。
arr
的排序數組應該由
sorted_arr = numpy.array([[-2., 8, .1], [-2., 5., .3], [4., 5., .1], [2., 2., .25], [-2., 0., .1], [-1.5, 0., .1], [-1., -3., .2], [1., -3., .1], [5, -4, .1]])
由於實際的數組非常大,我不想使用for
循環。 我怎樣才能對數組進行排序?
一種方法是使用np.lexsort
按第二列排序,然后按第一列排序。
由於默認情況下會按升序對值進行排序,因此您可以將第二列乘以-1以“翻轉”這些值,以便將這些值從高到低排序。
該函數返回一個索引數組,您可以使用這些索引重新排序arr
的行:
>>> arr[np.lexsort((arr[:, 0], -arr[:, 1]))]
array([[-2. , 8. , 0.1 ],
[-2. , 5. , 0.3 ],
[ 4. , 5. , 0.1 ],
[ 2. , 2. , 0.25],
[-2. , 0. , 0.1 ],
[-1.5 , 0. , 0.1 ],
[-1. , -3. , 0.2 ],
[ 1. , -3. , 0.1 ],
[ 5. , -4. , 0.1 ]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.