Matrix operations without for structure

I'm making a program in Matlab and now I am trying to make it run faster.
In one step I need to make operations in a matrix with more than 60000 rows and 2 columns. Now, I have a for structure to go to every line and make the following operation: (line-mean)*s*(line-mean)'
line is the line that is selected in each iteration, mean, is the result of the mean of each column, and s is a matrix 2x2.
I would like to know if it's possible to make this operation without a for structure, so that the program runs faster.
Thanks for your atention

Réponses (2)

Rick Rosson
Rick Rosson le 21 Avr 2012
Please try:
M = 60e3;
N = 2;
A = rand(M,N);
s = rand(N,N);
mu = ones(M,1)*mean(A);
X = A - mu;
R = X*s*X';
HTH.

1 commentaire

Pedro
Pedro le 21 Avr 2012
When I try to do that, it gives me the error: "Out of memory."
I think your solution only works with smaller matrices, or my computer can't make operations with big matrices like this one.

Connectez-vous pour commenter.

Teja Muppirala
Teja Muppirala le 22 Avr 2012
M = 60e3;
N = 2;
A = rand(M,N);
s = rand(N,N);
Am = bsxfun(@minus,A,mean(A)); %subtract the column means
V = sum((Am*s).*Am,2); % Do the matrix operation

Catégories

Question posée :

le 21 Avr 2012

Community Treasure Hunt

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

Start Hunting!

Translated by