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

Answers (2)

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 Comment

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.

Sign in to comment.

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

Categories

Asked:

on 21 Apr 2012

Community Treasure Hunt

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

Start Hunting!