Vectorizing for loops
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I have a function with 3 for loops and wondered if:
- Can these for loops be vectorized?
- If yes, could I get some guidance vectorizing them?
- If no, why not?
- As a newbie to this forum and MatLab, does the forum consider these appropriate questions to ask?
Function follows:
function[E, L, G] = SetPrincipalComponentBasis(S, A)
% S : covariance matrix
% A : conditioning matrix
if isempty (A)
N = size (S, 1);
K = 0;
[E_, L_] = eig (S);
E = E_;
for n = 1 : N
E (: , n) = E_ (: , N - n + 1);
L (n) = L_ (N - n + 1, N - n + 1);
end
else
[K,N]=size(A);
E=[];
B=A;
for n=1:N-K
if ~isempty(E)
B=[A
E'*S];
end
e=SetFirstEigenVectors(S,B);
E=[E e];
end
for n=N-K+1:N
B=E'*S;
e=SetFirstEigenVectors(S,B);
E=[E e];
end
E=[E(:,N-K+1:N) E(:,1:N-K)];
end
L=diag(E'*S*E);
G=diag(sqrt(L))*inv(E);
G=G(K+1:N,:);
Some additional info as requested by Walter and Matt...
Sizes of S and A typically less than 30 x 30. Sometimes only 5 X 5. As you discerned they are regular matrices. S & A will always have the same dimensions.
SetFirstEigenVectors code follows:
function e = SetFirstEigenVectors(S,A) N=size(S,1); P=eye(N); if rank(A)>0 P=eye(N)-A'*inv(A*A')*A; end [E_,L_]=eig(P*S*P'); [m,I]=max(diag(L_)); e=E_(:,I);
4 Commenti
Risposte (2)
Walter Roberson
il 21 Gen 2011
Your loop
for n = 1 : N
E (: , n) = E_ (: , N - n + 1);
L (n) = L_ (N - n + 1, N - n + 1);
end
is equivalent to
E = fliplr(E_);
L = flipud(fliplr(L_));
provided that your covariance matrix is square. (The square constraint comes out of the fact that you defined N as size(S,1) but use N in the second index rather than the first; defining N as size(S,2) would remove this constraint.)
We cannot determine whether the loops in your "else" condition can be vectorized without seeing the code for SetFirstEigenVectors()
0 Commenti
Matt Fig
il 21 Gen 2011
In addition to Walter's comment, this:
diag(sqrt(L))*inv(E)
is equivalent to the preferred:
diag(sqrt(L))/E
Also, it would help if you gave some typical sizes for inputs S and A, as well as any special characteristics they may possess.
0 Commenti
Vedere anche
Categorie
Scopri di più su Loops and Conditional Statements in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!