Permutation Matrix on a Vector

How can I compute the permutation matrix without using loop?
Let
V = Original n-vector
Vstar = Permuted n-vector
P = (n x n) Permutation Matrix
such that
P * V = Vstar.
Given V and Vstar, how can I determine P without using loop?

 採用された回答

Matt Fig
Matt Fig 2011 年 3 月 19 日

1 投票

If I understand your question correctly, there is no unique solution. You can understand this by looking at a 2-by-2 system.
P = [a b;c d]
V = [e;f]
Vs = [g;h]
Now from P*V = Vs, we know that:
a*e + b*f = g
c*e + d*f = h
Thus if V and Vs are known, then e, f, g, and h are known. But we still have two equations and four unknowns ( a , b, c, and d ). So unless there are two more ways of limiting the choices for the four unknowns, we are stuck.
For a larger system, the problem only gets worse.

2 件のコメント

Jan
Jan 2011 年 3 月 19 日
But in addition we have the term "permutation matrix". This means that a,b,c,d are 0 or 1 with only one 1 per row and column.
Raymond's Group Lee
Raymond's Group Lee 2011 年 3 月 19 日
Matt
You are right. I should be more careful when I define my permutation matrix. I would like my permutation matrix to have one 1 for every row and every column, with the remaining entries being 0.
Please refer to Wikipedia:
http://en.wikipedia.org/wiki/Permutation_matrix
Thanks.
Raymond

サインインしてコメントする。

その他の回答 (1 件)

Jan
Jan 2011 年 3 月 19 日

2 投票

If the values of V are unique:
V = (1:5)';
Vstar = V(randperm(length(V)));
P = bsxfun(@eq, V', Vstar);
isequal(P * V, Vstar)

4 件のコメント

Raymond's Group Lee
Raymond's Group Lee 2011 年 3 月 19 日
Jan,
Thank you for your solution. That is the answer I want.
Raymond
Matt Fig
Matt Fig 2011 年 3 月 19 日
Thanks Jan, I wasn't ready to assume this is what Raymond meant. You were correct.
Matt Fig
Matt Fig 2011 年 3 月 19 日
Jan, is this faster (though less comprehensible) on a newer version? On my 2007a, it is about 40% faster for N = 5000;
[VI,VI] = sort(V); % If V is sorted already, then skip this.
[VsI,VsI] = sort(Vstar);
P2 = zeros(N);
P2(VsI+(VI-1)*N) = 1;
Jan
Jan 2011 年 3 月 19 日
Surprising! Two SORT compared to a simple comparison? BSXFUN seems to be worth to be improved. A further acceleration: P2 = zeros(N, N, 'uint8');

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by