如何避免爲了建立一個矩陣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