Matrix with alternating signs in each row vector
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Leor Greenberger
le 19 Sep 2011
Commenté : the cyclist
le 13 Août 2014
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!
0 commentaires
Réponse acceptée
Fangjun Jiang
le 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 commentaires
the cyclist
le 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.
Plus de réponses (3)
the cyclist
le 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 commentaires
Andrei Bobrov
le 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
Sean de Wolski
le 19 Sep 2011
b = bsxfun(@plus,k',a(:,1:N))
to your comment in the Fangjun's answer.
0 commentaires
Jonathan
le 13 Août 2014
is there a generic way of making an array of ones that alternate form +1 to -1?
1 commentaire
the cyclist
le 13 Août 2014
Why did you bury a brand-new question as a comment on a 3-year-old thread?
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!