在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;