1

我正在考虑将双 for 循环重铸成我可以在并行计算中使用的东西。具体来说,我有

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

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

我正在考虑创建一个嵌套的二维数组,例如(象征性地):

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 数组中的每个元素都是{xi,yi}由向量 x 和 y 的元素组成的 2 元组。我可以在 matlab 中创建这样的对象吗?如果是这样,我如何调用每个元组中的每个单独元素?我需要有一种方法来调用这个数组中的每个元素,例如x2in 。{x2,y1}

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

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

4

1 回答 1

0

我认为您实际上正在寻找的是 meshgrid或者ndgrid

>> [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),您可以跳过第二个参数meshgrid

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

     >> [x y] = meshgrid( x0 + (1:N)*dx, y0 + (1:N)*dy );
    
  3. 最好不要在 Matlab中使用iandj作为变量名。

于 2013-08-04T06:12:49.367 回答