【发布时间】:2016-02-05 09:26:51
【问题描述】:
我有两个 numpy 数组,第一个 A 是一维的,第二个 B 在我想到的应用程序中是二维的,但实际上可以有任何维度。 B 的每个索引都与A 的单个索引覆盖相同的范围。
现在,我想对A 进行排序(按降序排列),但想将B 的每个维度连同它一起置换。从数学上讲,如果P是对A进行排序的置换矩阵,我想将B按照np.dot(P, np.dot(B, P.T))进行变换。例如。考虑这个例子,其中排序恰好对应于颠倒顺序:
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不保证特征值的任何顺序),按绝对值排序,并截断空间。将包含特征向量的矩阵的分量与特征值一起置换并通过切片来执行截断是有益的。
【问题讨论】: