Matrix with alternating signs in each row vector

5 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.

Categories

Find more on MATLAB in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!