生成多个-n:n序列

时间:2016-06-21 22:30:05

标签: matlab vectorization seq

我的Matlab有点生疏,我无法想出一个简洁的解决方案(高效),

给定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

1 个答案:

答案 0 :(得分: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);

不确定效率如何。但写作很有趣: - )