2012-07-12 66 views
2

我想使用存儲在另一個數組中的z座標從3D矩陣中的元素創建一個數組。 最簡單的方法是:使用數組作爲下標指令訪問矩陣中的元素

X=2; 
Y=3; 
lastZ=10000000 
for i=1:lastZ 
    new_array=matrix(X,Y,Z(i)); 
end 

但是我正在尋找使用「量化」的方式只矩陣,而不是for循環。我試過下面的代碼,但我得到一個錯誤信息「下標指標必須是真正的正整數或邏輯值」:

new_array=matrix(X,Y,Z); 

據我所知,Z是一個數組,不能用X和Y放這些是整數。有沒有更好的方式來創建單行代碼中的這樣的數組?

回答

3

你可以試試:

new_array=squeeze(matrix(X,Y,1:Z)); 
+0

是十分明顯的,乾淨!我花了幾個小時試圖理解_bsxfun_和_arrayfun_,但_squeeze _...但我仍然想知道爲什麼'new_array = matrix(X,Y,Z)'不起作用,而您的代碼中唯一的區別是_squeeze_的用法壓扁new_array?我的意思是我的索引有問題。 – workson 2012-07-12 18:25:39

+0

如果您將任何維度的索引超出第二個範圍,則不會得到「正常」向量。通過顯示'矩陣(X,Y,1:10)'來查看它。事實上,在我偶然發現擠壓之前,我也遇到了很多麻煩。 – 2012-07-12 18:46:48

+0

顯然,使用_squeeze_比直接循環慢很多!我在** Matlab 2012a **上。我讀了很多關於_for_ loops性能改進的內容。看起來像我的代碼在每個矢量化步驟的運行時間方面都變得更糟。也許是因爲像_find_,_sum_或_squeeze_這樣的函數,因爲我想避免任何_for_循環。 – workson 2012-07-16 18:50:02