在Matlab中从单个值生成向量

Bow*_*cho 3 arrays matlab

我有矢量c:

c = [2 5 3];
Run Code Online (Sandbox Code Playgroud)

我想以c连续的顺序生成长度等于每个值的向量.所以,我应该获得3个向量:

c1 = [1 2]; 
c2 = [3 4 5 6 7];
c3 = [8 9 10]; 
Run Code Online (Sandbox Code Playgroud)

接下来,我想在1x3单元阵列中对齐这些向量:

out = {c1 c2 c3}; 
Run Code Online (Sandbox Code Playgroud)

这可能看起来很简单,但我无法想象如何自动完成.有任何想法吗?

Sue*_*ver 7

你可以mat2cell用来完成这个.我们首先从建立一个数组1sum(c),然后使用mat2cell来分组阵列成片,其中每个片是每个元件的尺寸c.

out = mat2cell(1:sum(c), 1, c);
Run Code Online (Sandbox Code Playgroud)

这减少了对中间变量的需求,并直接为您提供了单元数组.

out{1} =

     1     2

out{2} =

     3     4     5     6     7

out{3} =

     8     9    10
Run Code Online (Sandbox Code Playgroud)

  • 为什么不是更直接的`out = accumarray(sum(bsxfun(@gt,1:sum(c),cumsum(c(:))),1).'+ 1,1:sum(c),[] ,@(x){x.'})`?:-P (3认同)