如何重塑非二次矩阵?

时间:2016-07-12 14:42:40

标签: matlab matrix reshape

我有一个带有尺寸(35064x1)的列向量A,我希望将其重新整形为一个包含720行和所需列数的矩阵。

在MATLAB中,它是这样的:

B = reshape(A,720,[])

其中B是我的新矩阵。

但是,如果我将35604除以720,那么剩下的就是余数。

理想情况下,MATLAB会在每列中填充720个值,直到最后一列,它不会有720个值;相反,504个值(48x720 + 504 = 35064)。

是否有任何函数(reshape)可以执行此任务?

由于我不擅长编码,我在进入编程之前首先使用内置函数。

3 个答案:

答案 0 :(得分:3)

$_REQUEST保留了元素的数量,但是您分两步实现了相同的目标

$_POST

答案 1 :(得分:0)

A = rand(35064,1);
NoCols = 720;
tmp = mod(numel(A),NoCols ); % get the remainder
tmp2 = NoCols -tmp;
B = reshape([A; nan(tmp2,1)],720,[]); % reshape the extended column

首先得到除法后的余数,然后从列数中减去该值以找出缺失值的数量。然后使用nan(或零,最适合您的目的)创建一个数组来填充原始数据,然后填充reshape。一个班轮:

A = rand(35064,1);
NoCols = 720;
B = reshape([A; nan(NoCols-mod(numel(A),NoCols);,1)],720,[]);

答案 2 :(得分:0)

karakfa得到了正确的想法,但他的代码中出现了一些错误。

修复错误并稍微简化它,最终得到:

B=nan(720,ceil(numel(a)/720));
B(1:numel(A))=A;

创建一个矩阵,其中A适合并将A的元素分配给矩阵的第一个数字(A)元素。

一种替代实现,可能会更快但操纵变量b

%pads zeros at the end
A(720*ceil(numel(A)/720))=0;
%reshape
B=reshape(A,720,[]);