Matlab 用矩阵计算单元阵列
我有一个n乘n的单元Z,其中Z的(I,j)分量是一个有序对(s,t) 然后我有一些矩阵Y。基本上Z的每个分量都包含一个坐标,我试图用它来定位Y的一个元素。换句话说,我试图返回一个n乘n的矩阵X,其中X(I,j)=Y(s,t) 下面是一个具体的例子: 假设n=3Matlab 用矩阵计算单元阵列,matlab,matrix,Matlab,Matrix,我有一个n乘n的单元Z,其中Z的(I,j)分量是一个有序对(s,t) 然后我有一些矩阵Y。基本上Z的每个分量都包含一个坐标,我试图用它来定位Y的一个元素。换句话说,我试图返回一个n乘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] 我试图
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=squence(num2cell(permute(cat(3,A,B),[3,1,2]),1))从另外两个矩阵A和B创建Z,但我一直被我的问题所困扰
fun = @(c) Y(c(1), c(2));
X = cellfun(fun, Z)
这可能比使用
[1,1]
而不是(1,1)
和…
等来复制可复制的Z
和Y
要快。使用fun=@(c)Y(c)甚至更小代码>等等。:-)谢谢@mbschenkel你的回答正好解决了我的问题。非常感谢。@mbschenkel+1整洁,虽然它可能不是最快的方法+1,性能大约提高5倍:)(但如果速度真的是目标,我会制作一个3x3x2矩阵,而不是一个单元格数组s.t.X=Y(Z);
可以完成这项工作。)谢谢你,路易斯。这很有帮助!我在一个极小值lsqnonlin调用的函数中运行这个东西。速度对我来说是很重要的。“劳伦斯提高速度,考虑使用一个3D阵列而不是一个细胞阵列,正如姆申克尔所建议的。这将使索引更容易,并且经过一些修改将避免在我的代码中使用vertcat
rc = vertcat(Z{:});
X = reshape(Y(sub2ind(size(Y), rc(:,1), rc(:,2))), size(Z));