Matrix with alternating signs in each row vector

4 views (last 30 days)
Hi Guys,
Is there a way to improve on this code that I wrote to optimize it?
M = zeros(M,N); % create an MxN matrix
M(1,:) = 1; % Set first row to 1
for r = 2:I
M(r,:) = -M(r-1,:); %sets alternate rows to -1 and +1
end
a = M * diag(1 2 3 4 5);
so M creates:
M =
1 1 1 1 1
-1 -1 -1 -1 -1
1 1 1 1 1
-1 -1 -1 -1 -1
1 1 1 1 1
-1 -1 -1 -1 -1
1 1 1 1 1
-1 -1 -1 -1 -1
and a
a =
1 2 3 4 5
-1 -2 -3 -4 -5
1 2 3 4 5
-1 -2 -3 -4 -5
1 2 3 4 5
-1 -2 -3 -4 -5
1 2 3 4 5
-1 -2 -3 -4 -5
Is this the fastest and most efficient implementation to get the above? Thanks!

Accepted Answer

Fangjun Jiang
Fangjun Jiang on 19 Sep 2011
Some improvement.
m=5;n=4;
M=ones(m,n);
M(2:2:end,:)=-1
Or alternative:
m=9;n=8;
a=(2*mod((1:m)',2)-1)*(1:n)
  5 Comments
the cyclist
the cyclist on 19 Sep 2011
I suggest that accept one of the answers here, assuming that it helped you. And make this comment into a separate question.
Fangjun Jiang
Fangjun Jiang on 19 Sep 2011
For that, you can use repmat.
b=repmat(k',1,N)+a

Sign in to comment.

More Answers (3)

the cyclist
the cyclist on 19 Sep 2011
One of many ways to get your result:
M = 7;
N = 5;
V = (-1).^(0:M);
A = bsxfun(@times,1:N,V')
  3 Comments
Jan
Jan on 20 Sep 2011
The power operation is very expensive. Using MOD is much faster.
Andrei Bobrov
Andrei Bobrov on 20 Sep 2011
Hi Jan! My "research"
>> t = zeros(100,2);
for j1 = 1:100
tic,(-1).^(0:1000)'*(1:100);t(j1,1)=toc;
tic,(2*rem((1:1000)',2)-1)*(1:100);t(j1,2)=toc;
end
>> [min(t);mean(t);median(t);max(t)]
ans =
0.0008 0.0006
0.0012 0.0012
0.0012 0.0010
0.0030 0.0259

Sign in to comment.


Sean de Wolski
Sean de Wolski on 19 Sep 2011
b = bsxfun(@plus,k',a(:,1:N))
to your comment in the Fangjun's answer.

Jonathan
Jonathan on 13 Aug 2014
is there a generic way of making an array of ones that alternate form +1 to -1?
  1 Comment
the cyclist
the cyclist on 13 Aug 2014
Why did you bury a brand-new question as a comment on a 3-year-old thread?

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!