在MATLAB中用矢量分量建立一个巨大的矩阵

在MATLAB中用矢量分量建立一个巨大的矩阵,matlab,for-loop,vector,matrix,Matlab,For Loop,Vector,Matrix,如何避免使用双for循环来构建矩阵pos,就像此代码所做的那样: pos=[0 0]; for i=1:m; for j=1:n; pos=[pos; i j]; end end m和n是诸如500和900之类的数字 为了提高计算时间,我必须找到一个更好的解决方案 非常感谢您。您可以很容易地通过 以上代码的工作原理如下meshgrid(在本例中)创建坐标为(X,Y)的二维网格X水平前进,而Y垂直前进。正如我们在for循环中看到的,m定义了水平边界,n表示垂直边界。通过调

如何避免使用双
for
循环来构建矩阵
pos
,就像此代码所做的那样:

pos=[0 0];
   for i=1:m;
   for j=1:n;
   pos=[pos; i j];
   end
end
m
n
是诸如500和900之类的数字

为了提高计算时间,我必须找到一个更好的解决方案

非常感谢您。

您可以很容易地通过

以上代码的工作原理如下
meshgrid
(在本例中)创建坐标为
(X,Y)
的二维网格<代码>X水平前进,而
Y
垂直前进。正如我们在
for
循环中看到的,
m
定义了水平边界,
n
表示垂直边界。通过调用
meshgrid(1:m,1:n)
,我正在为
x
Y
创建一个
nxm
网格,其中
x
的每一行从1前进到
m
,而
Y
的每一列从1前进到
n
。因此,它们都是
nxm
矩阵。用
m=4
n=5
调用上述函数将计算:

m = 4;
n = 5;
[X,Y] = meshgrid(1:m, 1:n)

X =

 1     2     3     4
 1     2     3     4
 1     2     3     4
 1     2     3     4
 1     2     3     4

Y =

 1     1     1     1
 2     2     2     2
 3     3     3     3
 4     4     4     4
 5     5     5     5
几乎遵循您希望的格式。您会注意到,通过单独查看列,这实现了您想要的,但是您希望将所有
X
Y
堆叠在
(nxm)+1x2
矩阵中(1表示
[0]
)。我们现在要做的就是把
X
Y
的每一列都叠在一起,为它们创建一个单独的列。我们可以通过执行
X(:)
Y(:)
将所有这些操作堆叠在一起
X(:)
将获取
X
的每一列,并创建一个将所有列堆叠在一起的列。对
Y(:)
也是如此。因此,我们首先通过附加
[0 0]
作为第一行来创建
pos
,然后将
X(:)
Y(:)
作为列附加到
pos
之后,从而完成
pos
的构造

让我们做一个例子作为概念证明。假设我们使用与之前相同的值:

m = 4;
n = 5;
使用您的
for
循环,我们得到:

pos =

 0     0
 1     1
 1     2
 1     3
 1     4
 1     5
 2     1
 2     2
 2     3
 2     4
 2     5
 3     1
 3     2
 3     3
 3     4
 3     5
 4     1
 4     2
 4     3
 4     4
 4     5
使用我编写的代码,我们还可以得到:

pos =

 0     0
 1     1
 1     2
 1     3
 1     4
 1     5
 2     1
 2     2
 2     3
 2     4
 2     5
 3     1
 3     2
 3     3
 3     4
 3     5
 4     1
 4     2
 4     3
 4     4
 4     5
小调 正如您所述,
m
n
将相对较大,我建议您在继续之前从工作区中清除
X
Y
X
Y
的创建只是为了帮助您创建
pos
。由于您不再需要它们,在计算
pos
后,请执行以下操作:

clear X; 
clear Y;

不懂语言(matlab?)。我要猜测某种形式的
meshgrid
。答案可能与语言有关。您使用的是什么语言?@U2EF1-是的,我在解决方案中使用了
meshgrid
。好地方@文琴佐-我已经为你写了一个解决方案。祝你好运非常感谢rayryeng的精彩回答!!
clear X; 
clear Y;