【问题标题】:Array rotation in MATLABMATLAB中的数组旋转
【发布时间】:2011-01-04 17:02:26
【问题描述】:

在 MATLAB 中,有没有办法将数组的元素旋转到另一个维度,例如:

y=[-1,0,1] -->  y=[-1; 0; 1] (like transpose)

y=[-1,0,1] -->  y(:,:,1)=-1, y(:,:,2)=0, y(:,:,3)=1 

y=[-1,0,1] -->  y(:,:,1,1)=-1, y(:,:,1,2)=0, y(:,:,1,3)=1

我想避免 for 循环。

【问题讨论】:

    标签: arrays matlab rotation


    【解决方案1】:

    您可以使用transposition、函数RESHAPE 或函数PERMUTE 执行这些类型的矩阵运算。例如:

    y = [-1 0 1];               %# Your 1-by-3 sample array
    
    y2 = y.';                  %'# Transposing y gives you a 3-by-1 array
    y2 = reshape(y,[3 1]);      %# This also gives you a 3-by-1 array
    y2 = permute(y,[2 1]);      %# This also gives you a 3-by-1 array
    
    y3 = reshape(y,[1 1 3]);    %# This gives you a 1-by-1-by-3 array
    y3 = permute(y,[3 1 2]);    %# This also gives you a 1-by-1-by-3 array
    
    y4 = reshape(y,[1 1 1 3]);  %# This gives you a 1-by-1-by-1-by-3 array
    y4 = permute(y,[4 1 2 3]);  %# This also gives you a 1-by-1-by-1-by-3 array
    

    【讨论】:

      【解决方案2】:

      虽然 reshape 和 permute 是更强大的工具,但您可以通过以下方式轻松解决给定的示例:

      y = [-1 0 1];
      y2(:,1)=y;
      y3(1,1,:)=y;
      y4(1,1,1,:)=y;
      

      【讨论】:

      • +1 以获得另一个可行的解决方案。然而,这个是有限的,因为它只在你分配给一个 new 变量时才有效。如果您想将重整后的结果放回旧变量y,例如y(1,1,:) = y;,则会出现赋值错误。在这种情况下需要 RESHAPE 或 PERMUTE。
      猜你喜欢
      • 2014-11-23
      • 1970-01-01
      • 2017-03-07
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      相关资源
      最近更新 更多