Matrix with alternating signs in each row vector
Mostra commenti meno recenti
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!
Risposta accettata
Più risposte (3)
the cyclist
il 19 Set 2011
One of many ways to get your result:
M = 7;
N = 5;
V = (-1).^(0:M);
A = bsxfun(@times,1:N,V')
3 Commenti
Andrei Bobrov
il 20 Set 2011
(-1).^(0:7)'*(1:5)
Jan
il 20 Set 2011
The power operation is very expensive. Using MOD is much faster.
Andrei Bobrov
il 20 Set 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
Sean de Wolski
il 19 Set 2011
b = bsxfun(@plus,k',a(:,1:N))
to your comment in the Fangjun's answer.
Jonathan
il 13 Ago 2014
0 voti
is there a generic way of making an array of ones that alternate form +1 to -1?
1 Commento
the cyclist
il 13 Ago 2014
Why did you bury a brand-new question as a comment on a 3-year-old thread?
Categorie
Scopri di più su Resizing and Reshaping Matrices in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!