![](/img/trans.png)
[英]2D numpy argsort index returns 3D when used in the original matrix
[英]NumPy array permute columns 3D matrix with argsort
我需要用從argsort
獲得的2D
置換矩陣pi
置換矩陣A
( axis
0的3D
矩陣)中列的元素,該矩陣包含所有列的新索引。
通過應用置換矩陣pi
上的矩陣A
( A[pi]
我將得到一個4D
與新的形狀的矩陣。 例如,形狀A
是(2,3,4)的形狀和A[pi]
是(2,3,3,4)。
我能夠使用以下命令從A[pi]
提取所需的排序矩陣:
swapaxes (diagonal(A[pi], axis1=2, axis2=1),1,2)
但這似乎太復雜和緩慢。
還有另一種優雅的解決方案嗎?
例:
print(A)
[[[ 73 701 2411 2414]
[ 5515 8292 8414 16135]
[ 100 1241 2146 2931]]
[[ 1335 1747 3418 6312]
[ 3788 5449 5753 9738]
[ 565 3038 3800 5430]]]
pi=argsort(Norm_order(A),0)
print(pi)
[[1, 0, 1],
[0, 1, 0]]
print(swapaxes(diagonal(A[pi],axis1=2,axis2=1),1,2))
[[[ 1335 1747 3418 6312]
[ 5515 8292 8414 16135]
[ 565 3038 3800 5430]]
[[ 73 701 2411 2414]
[ 3788 5449 5753 9738]
[ 100 1241 2146 2931]]]
也許是一個口味問題,但是我發現以下內容更具可讀性:
i, j = np.ogrid[:3, :4]
A[pi[..., None], i, j]
輸出:
array([[[ 1335, 1747, 3418, 6312],
[ 5515, 8292, 8414, 16135],
[ 565, 3038, 3800, 5430]],
[[ 73, 701, 2411, 2414],
[ 3788, 5449, 5753, 9738],
[ 100, 1241, 2146, 2931]]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.