Building a matrix in a faster way

조회 수: 8 (최근 30일)
Azza
Azza 2012년 10월 16일
Hi,
I am trying to build a matrix by giving each array in the matrix the same value in its first column. The value is [0;0;1]. My code look something like this:
yv = 1:-1:-1;
xv = -1:1:1;
for Y = 1:length(yv)
for X = 1:length(xv)
M(:,1,X,Y) = [0;0;1];
end
end
I was wondering if there is more efficient way to give the arrays for length (yv) and (xv) the value [0;0;1] instantly without using the for loop. My matrix in original is much larger than this and I need to make the code as faster to execute the data as possible.
Highly appreciate any help with this.
Best wishes
AA

채택된 답변

Matt J
Matt J 2012년 10월 16일
d=[0;0;1];
M=d(:,1,ones(1,length(xv)), ones(1,length(yv)))
  댓글 수: 2
Walter Roberson
Walter Roberson 2012년 10월 16일
Which can also be written as
M = repmat(d, [1, 1, length(xv), length(yv)]);
Matt J
Matt J 2012년 10월 16일
Yes, although repmat does use mcode containing loops, and therefore can be slow.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Azza
Azza 2012년 10월 17일
Many thanks Matt and Walter for your help. Both your answers are very valuable. The thing with my code is that I need to keep a counter in each line. For example the code with the for loop should look something like this:
for Y = 1:length(yv)
for X = 1:length(xv)
counter = 1;
M(:,counter,X,Y)= [0;0;1];
counter = counter;
M(:,counter,X,Y) = A*Rflip*M(:,1,X,Y)+B;
end
end
Thus, the counter should change from value 1 to 2 accordingly.
I have also replicated the matrix for A, Rflip and B in order to accomodate the M value for the length of arrays of (xv) and (yv) similar to your methods. The original sizes of matrices A and Rflip were 3*3 for each element. So I managed to replicate the matrix to [3 3 3 3] for (xy) and (xv) While for B was 3*1 and I made it into [3 1 3 3]. When I tried to execute the line with the replicated matrices for A, Rflip and B {while excluding the counter} I got this error message:
??? Error using ==> mtimes Input arguments must be 2-D.
So would you kindly help me in giving the length of arrays for (xv) and (xy) the same value of M without using the lengthy for loop method while including the counter?
Best wishes
AA
  댓글 수: 1
Matt J
Matt J 2012년 10월 17일
Perhaps. But first Accept-click the answer we gave you and then start a new post for your new question.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by