【问题标题】:How to Increase matrix size by rows [closed]如何按行增加矩阵大小[关闭]
【发布时间】:2018-08-03 19:25:41
【问题描述】:

矩阵行要增加。允许行重复,并且行顺序不是强制性的,而是预期的。新的行大小可能会也可能不会被原始行大小整除。

A=[1 2 3; 4 5 6; 7 8 9]
B=resize(A,9,3)

这将增加到 9 和 11 的行大小(两个不同的输出)。列大小保持不变。

【问题讨论】:

    标签: matlab resize reshape permute


    【解决方案1】:

    如果输出必须是零填充的,您只需索引目标矩阵的右下角并为其分配值0。无需调用padarray... Matlab 将自行处理其他所有事情:

    A = [1 2 3; 4 5 6; 7 8 9];
    
    B = A;
    B(9,3) = 0;
    
    C = A;
    C(11,3) = 0;
    

    如果您想通过重复执行此操作,可以使用repmat function,但它只能产生与原始矩阵相关的大小倍数......因此第二个目标需要更多努力:

    A = [1 2 3; 4 5 6; 7 8 9];
    
    B = repmat(A,3,1);
    
    C = repmat(A,4,1);
    C = C(1:11,:);
    % or C(12,:) = [];
    

    我能想到的最后一种选择需要更多的手动工作(用于复制)。例如,假设您希望目标矩阵再次补零,然后:

    A = [1 2 3; 4 5 6; 7 8 9];
    [A_rows,A_cols] = size(A);
    
    B = zeros(9,3);
    B(1:A_rows,1:A_cols) = A;
    
    C = zeros(11,3);
    C(1:A_rows,1:A_cols) = A;
    

    zeros 替换为onesNaN 将分别返回一个单填充矩阵或一个NaN 填充矩阵。

    【讨论】:

    • 预计会通过利用原始矩阵的行来增加行大小。在这种情况下,填充不是所需的方法。 Repmat 选项似乎是正确的。问题是当新行大小不能被原始行大小整除时如何获得新矩阵。
    • 如我的第二个 sn-p 所示,您删除超出所需矩阵维度的不需要的行:C = repmat(A,4,1); C(12,:) = []; 或者您选择所需的行,这可能更简单:C = repmat(A,4,1); C = C(1:11,:);。跨度>
    • 好的,请将答案编辑为必填项。
    • 没有可编辑的内容。这已经是答案的一部分。请再读一遍。
    【解决方案2】:

    这看起来像你想要的吗?

    A=[1 2 3; 4 5 6; 7 8 9];
    pad = zeros(6,3);
    B= [A; pad]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2021-09-05
      • 2016-05-17
      • 2021-05-11
      • 2020-01-06
      相关资源
      最近更新 更多