【问题标题】:construct cell array of ordered pairs from matrices从矩阵构造有序对的元胞数组
【发布时间】:2013-07-10 15:30:39
【问题描述】:

我想从以下两个矩阵创建一个有序对的元胞数组...

[X,Y] = meshgrid(1:10,1:10)

X =

 1     2     3     4     5     6     7     8     9    10
 1     2     3     4     5     6     7     8     9    10
 1     2     3     4     5     6     7     8     9    10
 1     2     3     4     5     6     7     8     9    10
 1     2     3     4     5     6     7     8     9    10
 1     2     3     4     5     6     7     8     9    10
 1     2     3     4     5     6     7     8     9    10
 1     2     3     4     5     6     7     8     9    10
 1     2     3     4     5     6     7     8     9    10
 1     2     3     4     5     6     7     8     9    10

Y =

 1     1     1     1     1     1     1     1     1     1
 2     2     2     2     2     2     2     2     2     2
 3     3     3     3     3     3     3     3     3     3
 4     4     4     4     4     4     4     4     4     4
 5     5     5     5     5     5     5     5     5     5
 6     6     6     6     6     6     6     6     6     6
 7     7     7     7     7     7     7     7     7     7
 8     8     8     8     8     8     8     8     8     8
 9     9     9     9     9     9     9     9     9     9
10    10    10    10    10    10    10    10    10    10

...其中(我假设为 1x2x10x10)元胞数组 Z 是一个元胞数组,其中 X 和 Y 中的所有条目都是 x 和 y 坐标,每对坐标都是 Z 的一个元素:

Z = { (1,1)  (2,1)  (3,1)  ... (10,1);
  (1,2)  (2,2)  (3,2)  ... (10,2);
  ...     ...    ...   ...  ...;
  (1,10) (2,10) (3,10) ... (10,10) }

我该怎么做呢?

【问题讨论】:

  • 尺寸描述让我有点困惑。我相信您实际上是在寻找 1x2 向量的 10x10 元胞数组。
  • 请注意,如果您的实际解决方案涉及使用 1:n 中的数字填充元胞数组,则可能有更简单的方法来实现您想要的。

标签: matlab multidimensional-array cell


【解决方案1】:
Z = squeeze(num2cell(permute(cat(3,X,Y),[3,1,2]),1));

步骤:

  1. 沿第三维连接 X 和 Y:

    Z = cat(3,X,Y)
    
  2. 排列结果数组以沿第一维具有坐标对:

    Z = permute(Z,[3,1,2])
    
  3. 转换为元胞数组:

    Z = num2cell(Z)
    
  4. 从元胞数组中删除不必要的单一维度:

    Z = squeeze(Z)
    

生成的元胞数组包含坐标对作为表单上的 2x1 列向量

[x-coordinate; y-coordinate]

【讨论】:

    【解决方案2】:

    会有什么问题

    Z = cat(3, X,Y)
    

    这样

    >> Z(1, 2, :)
    ans(:,:,1) =
         2
    ans(:,:,2) =
         1
    

    如果您不喜欢 1×1×2 格式,可以这样做

    Z = cellfun(@squeeze, num2cell(cat(3,X,Y),3), 'UniformOutput', false)
    

    或者这个

    Z = reshape(num2cell([X(:) Y(:)], 2), size(X))
    

    【讨论】:

      【解决方案3】:

      我自己可能会使用不同的东西,例如:

      [X(:) Y(:)]
      

      但是,我尝试以最简单的方式为您提供您正在寻找的输出:

      Z=num2cell(cat(3,X,Y),3)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-20
        • 2019-09-09
        • 2021-07-08
        • 2015-05-29
        • 1970-01-01
        • 2018-02-07
        • 2016-01-13
        • 1970-01-01
        相关资源
        最近更新 更多