Matlab 使用数组作为下标指示符访问矩阵中的元素

Matlab 使用数组作为下标指示符访问矩阵中的元素,matlab,Matlab,我想使用另一个数组中存储的z坐标,从三维矩阵中的元素创建一个数组。 最简单的方法是: X=2; Y=3; lastZ=10000000 for i=1:lastZ new_array=matrix(X,Y,Z(i)); end 但我正在寻找一种只使用矩阵而不是for循环的“矢量化”方法。我尝试了以下代码,但收到一条错误消息“下标索引必须是实正整数或逻辑数”: 我知道Z是一个数组,不能和X和Y放在一起,X和Y是整数。是否有更好的方法在一个线性代码中创建这样的数组?您可以尝试: new_a

我想使用另一个数组中存储的z坐标,从三维矩阵中的元素创建一个数组。 最简单的方法是:

X=2;
Y=3;
lastZ=10000000
for i=1:lastZ
    new_array=matrix(X,Y,Z(i));
end
但我正在寻找一种只使用矩阵而不是for循环的“矢量化”方法。我尝试了以下代码,但收到一条错误消息“下标索引必须是实正整数或逻辑数”:

我知道Z是一个数组,不能和X和Y放在一起,X和Y是整数。是否有更好的方法在一个线性代码中创建这样的数组?

您可以尝试:

new_array=squeeze(matrix(X,Y,1:Z));

那很清楚,很干净!我花了几个小时试图理解bsxfun和arrayfun,但是。。。但是我仍然想知道为什么
new_array=matrix(X,Y,Z)
不起作用,而代码中唯一的区别是使用挤压来展平新的_array?我的意思是,我的索引有问题吗?如果你索引超过第二个维度的任何维度,你就不会得到一个“法线”向量。通过显示
矩阵(X,Y,1:10)
自己查看它。事实上,在我偶然发现挤压之前,我也遇到了很多麻烦。显然,使用挤压比直接的for循环要慢得多!!!我在Matlab2012A上。我读了很多关于for循环性能改进的文章。就运行时间而言,我的代码似乎在每一个矢量化步骤中都变得更糟。可能是因为像查找、求和或压缩这样的函数,我想避免任何for循环。在我使用Matlab 2009a的系统上,压缩版本的时间大约是循环版本的三分之一。
new_array=squeeze(matrix(X,Y,1:Z));