我有一个带有尺寸(35064x1)的列向量A
,我希望将其重新整形为一个包含720行和所需列数的矩阵。
在MATLAB中,它是这样的:
B = reshape(A,720,[])
其中B
是我的新矩阵。
但是,如果我将35604除以720,那么剩下的就是余数。
理想情况下,MATLAB会在每列中填充720个值,直到最后一列,它不会有720个值;相反,504个值(48x720 + 504 = 35064)。
是否有任何函数(reshape
)可以执行此任务?
由于我不擅长编码,我在进入编程之前首先使用内置函数。
答案 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,[]);