2015-02-08 153 views
0

我有兩個向量v1和v2。是否有任何matlab函數可以找到v1和v2之間的置換T矩陣,以便在matlab中T * v1 = v2?實際上,我知道如何在矢量短的情況下手工找到置換矩陣。我只是不知道如何在向量的大小很長的時候使用matlab函數來找到這個矩陣。matlab中的置換矩陣

謝謝。

回答

1

您可以使用排序的第二個輸出參數得到以下:

function [I, PMat] = permutation_From_To(A,B) 
[~,IA] = sort(A); 
[~,IB] = sort(B); 
I(IB) = IA; 
PMat(:,I) = eye(length(A)); 

您可以通過使用它:

A = rand(10,1); 
B = A(randperm(10)); 
[I, PMat] = permutation_From_To(A,B); 
%// All the following three lines will output the vector `B`. 
B 
A(I) 
PMat*A 

版本A(I)會比PMat*A快,所以我包括即使你只是要求矩陣版本。