Matrix with alternating signs in each row vector

2 vues (au cours des 30 derniers jours)
Leor Greenberger
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!

Réponse acceptée

Fangjun Jiang
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
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.
Fangjun Jiang
Fangjun Jiang le 19 Sep 2011
For that, you can use repmat.
b=repmat(k',1,N)+a

Connectez-vous pour commenter.

Plus de réponses (3)

the cyclist
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
Jan
Jan le 20 Sep 2011
The power operation is very expensive. Using MOD is much faster.
Andrei Bobrov
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

Connectez-vous pour commenter.


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

Jonathan
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
the cyclist le 13 Août 2014
Why did you bury a brand-new question as a comment on a 3-year-old thread?

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by