Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 用矩阵计算单元阵列_Matlab_Matrix - Fatal编程技术网

Matlab 用矩阵计算单元阵列

Matlab 用矩阵计算单元阵列,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] 我试图

我有一个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]
我试图得到一个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));