1

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

IE

[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) }

我该怎么做呢?

4

3 回答 3

1

会有什么问题

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))
于 2013-07-10T16:44:41.010 回答
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]
于 2013-07-10T15:58:04.807 回答
0

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

[X(:) Y(:)]

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

Z=num2cell(cat(3,X,Y),3)
于 2013-07-11T13:14:43.437 回答