Matrix with alternating signs in each row vector
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Leor Greenberger
am 19 Sep. 2011
Kommentiert: the cyclist
am 13 Aug. 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 Kommentare
Akzeptierte Antwort
Fangjun Jiang
am 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 Kommentare
the cyclist
am 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.
Weitere Antworten (3)
the cyclist
am 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 Kommentare
Andrei Bobrov
am 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
am 19 Sep. 2011
b = bsxfun(@plus,k',a(:,1:N))
to your comment in the Fangjun's answer.
0 Kommentare
Jonathan
am 13 Aug. 2014
is there a generic way of making an array of ones that alternate form +1 to -1?
1 Kommentar
the cyclist
am 13 Aug. 2014
Why did you bury a brand-new question as a comment on a 3-year-old thread?
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!