Matrix with alternating signs in each row vector
2 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
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!