【问题标题】:Reshape MATLAB vector in Row-wise manner以逐行方式重塑 MATLAB 向量
【发布时间】:2013-05-16 16:05:28
【问题描述】:

假设我有一个矩阵a = [1 2 3 4 5 6];,例如,我如何以逐行方式重塑它 reshape(a, 2, 3)屈服

1 2 3 
4 5 6

而不是 MATLAB 生成的默认按列结果:

1 3 5 
2 4 6

我相信这是一项微不足道的任务,它可能具有实现此目的的内置功能。我已经实现了一个完美的函数……但是,有没有更短、更整洁、更 MATLAB 的方法?谢谢。

function y = reshape2(x, m, n) 
  y = zeros(m, n);

  ix = 0; 
  for i = 1:m
     for j = 1:n
         ix = ix + 1;
         y(i, j) = x(ix);
     end 
  end 
end

【问题讨论】:

    标签: algorithm matlab


    【解决方案1】:

    这个怎么样?

    reshape(a, 3, 2)'

    【讨论】:

    • 此解决方案对 ND 阵列失败。考虑一个 3D 数组 2x3x4 a = [1:2*3*4]
    • 此解决方案对 ND 阵列失败。考虑一个 2x3x4 的 3D 数组 a = [1:2*3*4] 预期被重新整形如下,b(:,:,1) = 1 2 3 4 5 6 7 8 9 10 11 12 b(:,:,2) = 13 14 15 16 17 18 19 20 21 22 23 24
    【解决方案2】:

    以行方式将m*n矩阵A重塑为p*k矩阵B的一般方法是:

    c=reshape(A',1,m*n) 
    B=reshape(c,k,p)' 
    example: m=3 n=4 , p=6, q=2
    A=[1 2 3 4; 5 6 7 8; 9 10 11 12] 
    c=[1 2 3 4 5 6 7 8 9 10 11 12] 
    B=[1 2 ; 3 4; 5 6; 7 8; 9 10; 11 12] 
    

    【讨论】:

      【解决方案3】:

      确实是reshape(A',cols,rows)'

      (在您的示例中为 reshape(a', 3, 2)')

      【讨论】:

      • 为刚刚删除您的问题干杯 - 我刚刚花了 10 分钟准备答案。我可能对其他人有用。 (我认为这是一个很好的问题)。
      • 哦,我会重新发布问题,然后@MatthewTaylor
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多