在MATLAB中将数组拆分为多个部分

Eli*_*jah 5 matlab

我喜欢将数组分成相同的部分,如下所示:

 a=[1 2 3 4 5 6 7 8 9 10]
 n = 2;
 b = split(a, n);

 b =

 1     2     3     4     5
 6     7     8     9    10
Run Code Online (Sandbox Code Playgroud)

哪个功能可以做到这一点?

小智 14

试试这个:

a = [1 2 3 4 5 6]
reshape (a, 2, 3)
Run Code Online (Sandbox Code Playgroud)

  • 这实际上并没有给出问题中的输出.它必须是'重塑(a,3,2)'. (7认同)

yuk*_*yuk 13

如果a可以除以,n则实际上只能为RESHAPE提供一个参数.

要重塑为2行:

b = reshape(a,2,[])
Run Code Online (Sandbox Code Playgroud)

要重塑为2列:

b = reshape(a,[],2)
Run Code Online (Sandbox Code Playgroud)

请注意,重新整形按列工作,它先填充第1列,然后填充第2列,依此类推.要获得所需的输出,您必须重塑为2列,然后转置结果.

b = reshape(a,[],2)'
Run Code Online (Sandbox Code Playgroud)

您可以在重塑前进行检查:

assert(mod(numel(a),n)==0,'a does not divide to n')
Run Code Online (Sandbox Code Playgroud)

  • 你必须首先用适当数量的NaN填充向量,因此它变为可重新计算:`nn = floor(numel(a)/ n)-mod(numel(a)/ n); a2 = [a,nan(1,nn)];`(没试过它.) (2认同)