How do I generate a vector of ordered integer without a loop or in faster way
조회 수: 1 (최근 30일)
이전 댓글 표시
I have to generate a vector 0123123451234567123456789 and the quickest idea was given by cyclist
M=[0];
for q=3:2:9
M=[M,1:q];
end
which is very slow. Does anyone have idea to make it faster? Thanks alot
댓글 수: 0
답변 (2개)
dpb
2015년 11월 25일
Prealllocate and populate instead of concatenating for starters...
M=zeros(1,1+sum(q));
i1=2;
for q=3:2:9
i2=i1-1+q;
M(i1:i2)=[1:q];
i1=i2+1;
end
I gotta' run at the moment but a kreative use of
doc kron % _might_ bring nirvana, not sure otomh; haven't had time to think it thru...
댓글 수: 3
Stephen23
2015년 11월 25일
편집: Stephen23
2015년 11월 25일
X = floor(sqrt(0:(p+1)^2-1));
Y = diff(X);
Y(logical(Y)) = 0:-2:-2*nnz(Y)+1;
Y(Y==0) = 1;
Z = [0,cumsum(Y)];
This is hundreds of times faster than your original code (p=10000):
Elapsed time is 3.095720 seconds.
Elapsed time is 0.000041 seconds.
Note that as p gets larger it will reach your memory limit very quickly: each magnitude increase in p causes a two-magnitude increase in the number of elements of the output vector.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!