【发布时间】:2018-04-10 02:26:57
【问题描述】:
我需要将矩阵A(3D 矩阵由axis 0)中的列元素置换为2D 置换矩阵pi 从argsort 获得,其中包含所有列的新索引。
通过在矩阵A (A[pi]) 上应用置换矩阵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]]]
【问题讨论】:
-
感谢威廉的帮助 :)。我是新来的。