我有两个,numpy阵列,第一个,A
,一维,第二个,B
,是在应用程序我想到的二维,但真的可以有任何维度。 B
的每个索引涵盖了与A
的单个索引相同的范围。排序一个NumPy数组并排列另一个与它
现在,我想对A
进行排序(按降序排列),但想排列B
以及它的每个维度。从数学上讲,如果P
是排序A
的置换矩阵,我想根据np.dot(P, np.dot(B, P.T))
转换B
。例如。考虑这个例子排序巧合的是对应于反向排序:
In [1]: import numpy as np
In [2]: A = np.array([1,2,3])
In [3]: B = np.random.rand(3,3); B
Out[3]:
array([[ 0.67402953, 0.45017072, 0.24324747],
[ 0.40559793, 0.79007712, 0.94247771],
[ 0.47477422, 0.27599007, 0.13941255]])
In [4]: # desired output:
In [5]: A[::-1]
Out[5]: array([3, 2, 1])
In [6]: B[::-1,::-1]
Out[6]:
array([[ 0.13941255, 0.27599007, 0.47477422],
[ 0.94247771, 0.79007712, 0.40559793],
[ 0.24324747, 0.45017072, 0.67402953]])
我心目中的应用是为了获得一个非对称矩阵的特征值和特征向量使用np.linalg.eig
(相对于eigh
,eig
不保证任何顺序特征值),按绝对值对它们进行排序,并截断空间。将保持特征向量的矩阵的分量与特征值一起排列并通过切分来执行截断将是有益的。
你是对的,当然,我只需要重新排列特征向量矩阵的列。感谢您也指出了这一点。 – Jonas