How to make an array of alternating 1 and -1?
70 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
So far I have
xc = ones(1,12) for n=0:1:11 xc(n) = (-1).^n end
Mathematically, shouldn't it come out to an array of [1,-1,1,-1,1,-1,1,-1,1,-1]? I am getting this error:
"Subscript indices must either be real positive integers or logicals.
Error in test (line 3) xc(n) = (-1).^n"
0 Kommentare
Antworten (4)
Star Strider
am 9 Dez. 2017
MATLAB indexing begins with 1, not 0, so you have to adjust your code slightly:
xc = ones(1,12);
for n=1:12
xc(n) = (-1).^(n-1);
end
xcv = (-ones(1,12)).^(0:11); % Vectorised Version
The ‘vectorised version’ is simply to demonstrate how to use MATLAB’s vectorising ability to do the same operation.
2 Kommentare
Stephen23
am 9 Dez. 2017
Why so complex?:
>> (-1).^(0:11)
ans =
1 -1 1 -1 1 -1 1 -1 1 -1 1 -1
Bill Tubbs
am 31 Okt. 2022
Even easier:
out = cumprod(-ones(1, 12))
out =
-1 1 -1 1 -1 1 -1 1 -1 1 -1 1
2 Kommentare
DGM
am 31 Okt. 2022
Bearbeitet: DGM
am 31 Okt. 2022
That's faster than I expected, but I guess it makes some sense.
N = 1E6;
timeit(@() f1(N))
timeit(@() f2(N))
timeit(@() f3(N))
timeit(@() f4(N))
timeit(@() f5(N))
timeit(@() f6(N))
function f1(N)
% slower than i expected
out = 2*rem(1:N,2) - 1;
end
function f2(N)
out = (-ones(1,N)).^(0:(N-1));
end
function f3(N)
out = (-1).^(0:(N-1));
end
function f4(N)
% faster than i expected
out = -cumprod(-ones(1,N));
end
function f5(N)
% only works if N is even!
out = reshape(repmat([1;-1],[1 N/2]),1,[]);
end
function f6(N)
% this is a bit slower and uglier than f5, but works for any N
out = reshape(repmat([1;-1],[1 ceil(N/2)]),1,[]);
out = out(1:N);
end
Bill Tubbs
am 31 Okt. 2022
Nice! Thanks for pointing out the simplification (f3). I will update my comment.
Bill Tubbs
am 31 Okt. 2022
Bearbeitet: Bill Tubbs
am 31 Okt. 2022
Here's another way. A geometric series:
out = (-1).^(0:11)
out =
1 -1 1 -1 1 -1 1 -1 1 -1 1 -1
0 Kommentare
Siehe auch
Kategorien
Mehr zu Performance and Memory 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!