如何避免为了建立一个矩阵pos
像这样的代码中使用双for
循环的作用:建立与矢量分量巨大的矩阵在MATLAB
pos=[0 0];
for i=1:m;
for j=1:n;
pos=[pos; i j];
end
end
m
和n
是数字,如500和900
为了提高计算时间,我必须找到更好的解决方案。
非常感谢。
如何避免为了建立一个矩阵pos
像这样的代码中使用双for
循环的作用:建立与矢量分量巨大的矩阵在MATLAB
pos=[0 0];
for i=1:m;
for j=1:n;
pos=[pos; i j];
end
end
m
和n
是数字,如500和900
为了提高计算时间,我必须找到更好的解决方案。
非常感谢。
您可以通过meshgrid
轻松完成此操作。
[X,Y] = meshgrid(1:m, 1:n);
pos = [0 0; X(:) Y(:)];
以上代码的工作原理如下。 meshgrid
(在这种情况下)创建了一个(X,Y)
坐标的2D网格。 X
水平前进,而Y
垂直前进。正如我们在for
循环中看到的那样,m
定义了水平边界,而n
表示了垂直边界。通过调用meshgrid(1:m, 1:n)
,我创建一个n x m
网格都X
和Y
,其中X
每行前进1至m
,而Y
每列前进从1到n
。因此,这些都将是n x m
矩阵。调用以上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
都堆叠在(n x m) + 1 x 2
矩阵中(1代表[0 0]
)。我们现在要做的就是取X
和Y
的每一列,并将它们堆叠在一起,为两者创建一个列。我们可以通过做X(:)
和Y(:)
将所有这些堆叠在一起。 X(:)
将采取X
的每一列,并创建一个列,将所有列堆叠在一起。 Y(:)
也一样。因此,我们首先通过附加[0 0]
作为第一行创建pos
,然后我们将X(:)
和Y(:)
作为列添加到pos
之后,从而完成pos
的构建。
让我们举一个例子作为概念验证。假设我们使用相同的值就像我们之前:使用您for
循环
m = 4;
n = 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
使用自己编写的代码中,我们还可以得到:
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
答案可能与语言有关。你在用什么语言? – user3288829
赦免matlab! – Kevin