【问题标题】:How do I reshape a non-quadratic matrix?如何重塑非二次矩阵?
【发布时间】:2016-07-12 14:42:40
【问题描述】:

我有一个列向量A,其尺寸为 (35064x1),我想将其重塑为一个包含 720 行和尽可能多的列的矩阵。

在 MATLAB 中,它会是这样的:

B = reshape(A,720,[])

其中B 是我的新矩阵。

但是,如果我将 35604 除以 720,就会有余数。

理想情况下,MATLAB 会用 720 个值填充每一列,直到最后一列没有 720 个值;而是 504 个值 (48x720+504 = 35064)。

是否有任何函数,如reshape,可以执行此任务?

由于我不擅长编码,所以在开始编程之前,我会先求助于内置函数。

【问题讨论】:

    标签: matlab matrix reshape


    【解决方案1】:

    reshape 保留了元素的数量,但您只需两步即可获得相同的效果

    b=zeros(720*ceil(35604/720),1); b(1:35604)=a;
    reshape(b,720,[])
    

    【讨论】:

    • 想法正确,但代码不正确。 zero(4) 创建一个 4x4 矩阵。
    【解决方案2】:
    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,[]);
    

    【讨论】:

      【解决方案3】:

      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,[]); 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-16
        相关资源
        最近更新 更多