我想从以下两个矩阵中创建有序对的单元格数组......
即
[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) }
我将如何做到这一点?
答案 0 :(得分:1)
Z = squeeze(num2cell(permute(cat(3,X,Y),[3,1,2]),1));
步骤:
沿第三维连接X和Y:
Z = cat(3,X,Y)
置换生成的数组,使其具有沿第一维的坐标对:
Z = permute(Z,[3,1,2])
转换为单元格数组:
Z = num2cell(Z)
从单元格数组中删除不必要的单例维度:
Z = squeeze(Z)
结果单元格数组在表格
上包含2x1列向量的坐标对[x-coordinate; y-coordinate]
答案 1 :(得分:1)
会出现什么问题
Z = cat(3, X,Y)
这样
>> Z(1, 2, :)
ans(:,:,1) =
2
ans(:,:,2) =
1
如果您不喜欢1 x 1乘2格式,则可以执行此操作
Z = cellfun(@squeeze, num2cell(cat(3,X,Y),3), 'UniformOutput', false)
或者这个
Z = reshape(num2cell([X(:) Y(:)], 2), size(X))
答案 2 :(得分:0)
我可能会使用自己的东西是不同的,例如:
[X(:) Y(:)]
但是,我试图以最简单的方式为您提供所需的输出:
Z=num2cell(cat(3,X,Y),3)