2016-06-21 2 views
1

내 matlab에 조금 녹슨, 나는, (효율적) 깔끔한 해결책을 마련 할 수는 -n의 여러 시퀀스를 생성 : N

주어진 NMAX에 대한

원하는 출력 :

nMax = 3; 
mn = cell2mat(arrayfun(@(n) [(-n:n) ;(-n:n)*0+n], 1:nMax, 'UniformOutput', false)); 
mn = 

-1  0  1 -2 -1  0  1  2 -3 -2 -1  0  1  2  3 
1  1  1  2  2  2  2  2  3  3  3  3  3  3  3 

(이상적으로는 이의 전치).


편집 : 여기, 제안 된 솔루션을 좋은 속도 향상을 요약 한 것

tN = [5:100, 200:50:1000]; 
for ii=1:length(tN) 
f1 = @() f_mn(tN(ii)); 
f2 = @() f_mn2(tN(ii)); 
gain(ii) = timeit(f1)/timeit(f2); 
end 

enter image description here

답변

2

이 시도 :

nMax = 3; 
u = nMax^2+2*nMax; 
mn = [ ones(u, 1) zeros(u, 1) ]; 
vv = 1:nMax; 
ww = vv.^2; 
mn(ww, 1) = -2*vv+1; 
mn(ww, 2) = 1; 
mn = cumsum(mn, 1); 

을 방법을 모르는 효율적인 IT 될거야. 하지만 재미 있었어 :-)

관련 문제