フィルターのクリア

Matrix operations without for structure

1 回表示 (過去 30 日間)
Pedro
Pedro 2012 年 4 月 21 日
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

回答 (2 件)

Rick Rosson
Rick Rosson 2012 年 4 月 21 日
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 件のコメント
Pedro
Pedro 2012 年 4 月 21 日
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.

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


Teja Muppirala
Teja Muppirala 2012 年 4 月 22 日
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

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by