我有一个n乘n的单元格Z,其中Z的(i,j)分量是有序对(s,t)。
然后我有一些矩阵Y.基本上Z的每个组件都包含一个坐标,我试图找到Y的元素。换句话说,我试图返回一个由n矩阵X,其中X(i,j) )= Y(s,t)。
这是一个具体的例子:
假设n = 3,
Z = {[1 1] [2 1] [2 2];
[1 1] [1 3] [3 3];
[3 2] [3 1] [2 4]}
Y = [1 2 3 5;
2 3 5 7;
1 0 4 6]
我试图得到一个3乘3的矩阵,在这个例子中给出
[1 2 3;
1 3 4;
0 1 7]
我尝试使用Z = squeeze(num2cell(permute(cat(3,A,B),[3,1,2]),1))从另外两个矩阵A和B创建Z,但是我坚持自己的问题。
答案 0 :(得分:5)
fun = @(c) Y(c(1), c(2));
X = cellfun(fun, Z)
答案 1 :(得分:3)
rc = vertcat(Z{:});
X = reshape(Y(sub2ind(size(Y), rc(:,1), rc(:,2))), size(Z));
这可能比@mbschenkel's answer更快,因为它可以避免cellfun
。