Matlab嵌套列表数据结构

时间:2013-08-04 06:05:03

标签: matlab

我正在考虑重新设计一个双循环到我可以用于并行计算的东西。具体来说,我有

for i = 1 : N
    x = x0+i*dx;
    for j = 1 : N
        y = y0+j*dy;
    end
end

并且主程序调用需要xy作为输入参数的函数。在我的问题中,变量xy是独立的,因此两个for循环应该能够重新制作更简单的东西,可以更有效地运行,利用matlab的矩阵计算。

我正在考虑创建一个嵌套的2D数组,如(符号):

A = [{x0,y0},{x0,y1},{x0,y2},...,{x0,yN};
     {x1,y0},{x1,y1},{x1,y2},...,{x1,yN};
     ...
     {xN,y0},{xN,y1},{xN,y2},...,{xN,yN}]

即。 2D数组中的每个元素是由向量x和y的元素形成的2元组{xi,yi}。我可以在matlab中创建这样的对象吗?如果是这样,我如何调用每个元组中的每个元素?我需要一种方法来调用每个元素,例如x2中的{x2,y1},在此数组中。

我正在考虑这样做,以便使用GPU上的并行处理工具箱,使程序与每组元组{xi,yi}同时给出的输入参数并行运行。

非常感谢您的帮助。 詹姆斯

1 个答案:

答案 0 :(得分:0)

我认为您实际需要的是meshgridndgrid

>> [x y] = meshgrid( 1:N, 1:N )

对于N=3,您将获得

>> [x y] = meshgrid( 1:3, 1:3 )
x =

 1     2     3
 1     2     3
 1     2     3


y =

 1     1     1
 2     2     2
 3     3     3

现在,如果您想要访问一对,则可以访问每个矩阵的xy坐标。
例如,访问ii=1jj=2

的坐标
>> ii=1; jj=2;
>> [x(ii,jj) y(ii,jj)]

几条评论

  1. 如果您希望xy都采用相同的值范围(例如此示例1:N),则可以跳过{{1}的第二个参数}}

    meshgrid
  2. 您可以使用>> [x y] = meshgrid( 1:N ); meshgrid修改x的输入,以捕获ydx所需的确切模式:

    dy
  3. 最好是not to use i and j as variable names in Matlab