簡體   English   中英

按元素排序多個numpy數組

[英]Sorting multiple numpy arrays elementwise

假設我有3個要逐元素排序的數組(我事先知道數組的數量)。 例如,假設我有:

import numpy as np

x = np.array([
[100, 200, 300],
[400, 500, 600],
[700, 800, 900]
])

y = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
])

z = np.array([
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
])

我想獲得每個元素的順序:

[
[[0, 2, 1], [0, 2, 1], [0, 2, 1]], [[0, 2, 1], [0, 2, 1], [0, 2, 1]], [[0, 2, 1], [0, 2, 1], [0, 2, 1]],
[[0, 2, 1], [0, 2, 1], [0, 2, 1]], [[0, 2, 1], [0, 2, 1], [0, 2, 1]], [[0, 2, 1], [0, 2, 1], [0, 2, 1]],
[[0, 2, 1], [0, 2, 1], [0, 2, 1]], [[0, 2, 1], [0, 2, 1], [0, 2, 1]], [[0, 2, 1], [0, 2, 1], [0, 2, 1]]
]

在這種情況下,所有位置都以相同的順序排列,以使示例保持簡單(0> 2> 1),但實際上,每個數組上的每個元素都可能大於另一個數組上的對應元素。 我也在使用高維數組(3d而不是2d),但是我認為總體思路是相同的。

我相信我需要重塑數組,然后np.argsort它們進行np.argsort (或只是常規np.sort ,我對值更感興趣,而不是它們來自何處,盡管如果擁有原點的開銷不高,可能對您很有幫助)。 但是我不確定如何重塑它們,以便可以應用該操作。 保證所有數組都具有相同的形狀,盡管這里有我的示例,但它始終是偶數。

我不確定我下定單后想到的格式是否適合索引,但是目前我無法找到一種更好的方法來對結果進行分組。 我相信我可以稍后將它們拆分,例如使用answer[...,0]表示最大索引(或最大值),使用answer[...,1]表示第二個索引,依此類推。 盡管如果我有索引,我將不得不稍后將它們映射到數組。 我認為應該沒那么難,我只需np.stack它們np.stack在一起就可以了。

有什么建議么?

您可以使用dstack()在最后一個軸上將它們綁定在一起,然后在期望的軸上使用np.sort()來整理數組:

In [10]: arr = np.dstack((x, y, z))

In [11]: arr.sort(2)

In [12]: arr
Out[12]: 
array([[[  1,  10, 100],
        [  2,  20, 200],
        [  3,  30, 300]],

       [[  4,  40, 400],
        [  5,  50, 500],
        [  6,  60, 600]],

       [[  7,  70, 700],
        [  8,  80, 800],
        [  9,  90, 900]]])

如果您希望結果按降序排列:

In [13]: arr[:,:,::-1]
Out[13]: 
array([[[100,  10,   1],
        [200,  20,   2],
        [300,  30,   3]],

       [[400,  40,   4],
        [500,  50,   5],
        [600,  60,   6]],

       [[700,  70,   7],
        [800,  80,   8],
        [900,  90,   9]]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM