如何重塑非二次矩阵?
How do I reshape a non-quadratic matrix?
我有一个维度为 (35064x1) 的列向量 A
,我想将其重新整形为一个包含 720 行和所需列数的矩阵。
在 MATLAB 中,它会是这样的:
B = reshape(A,720,[])
其中 B
是我的新矩阵。
但是,如果我用 35604 除以 720,就会有余数。
理想情况下,MATLAB 会用 720 个值填充每一列,直到最后一列不会有 720 个值;相反,504 个值 (48x720+504 = 35064)。
是否有任何功能,如 reshape
,可以执行此任务?
由于我不擅长编码,所以在开始编程之前我会先求助于内置函数。
reshape
保留元素的数量,但您分两步实现相同的数量
b=zeros(720*ceil(35604/720),1); b(1:35604)=a;
reshape(b,720,[])
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,[]);
karakfa 的想法是正确的,但他的代码中有些错误。
修复错误并稍微简化它,您最终得到:
B=nan(720,ceil(numel(a)/720));
B(1:numel(A))=A;
创建一个矩阵,其中 A 适合并将 A 的元素分配给矩阵的第一个 numel(A) 个元素。
另一种实现可能会更快一些但会操纵您的变量b
%pads zeros at the end
A(720*ceil(numel(A)/720))=0;
%reshape
B=reshape(A,720,[]);
我有一个维度为 (35064x1) 的列向量 A
,我想将其重新整形为一个包含 720 行和所需列数的矩阵。
在 MATLAB 中,它会是这样的:
B = reshape(A,720,[])
其中 B
是我的新矩阵。
但是,如果我用 35604 除以 720,就会有余数。
理想情况下,MATLAB 会用 720 个值填充每一列,直到最后一列不会有 720 个值;相反,504 个值 (48x720+504 = 35064)。
是否有任何功能,如 reshape
,可以执行此任务?
由于我不擅长编码,所以在开始编程之前我会先求助于内置函数。
reshape
保留元素的数量,但您分两步实现相同的数量
b=zeros(720*ceil(35604/720),1); b(1:35604)=a;
reshape(b,720,[])
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,[]);
karakfa 的想法是正确的,但他的代码中有些错误。
修复错误并稍微简化它,您最终得到:
B=nan(720,ceil(numel(a)/720));
B(1:numel(A))=A;
创建一个矩阵,其中 A 适合并将 A 的元素分配给矩阵的第一个 numel(A) 个元素。
另一种实现可能会更快一些但会操纵您的变量b
%pads zeros at the end
A(720*ceil(numel(A)/720))=0;
%reshape
B=reshape(A,720,[]);