[英]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.