2012-03-03 20 views
2

我完全堅持這一點:我從一個平面文件類型的列表開始,我從這樣的SQL語句中獲得並希望將它轉換爲4維數組。MATLAB:將一個平面文件列表轉換成多維數組

SELECT a1, a2, a3, a4, v FROM table A; 

a1 a2 a3 a4 v 
-------------- 
2 2 3 3 100 
2 1 2 2 200 
3 3 3 3 300 
... 
  • A1至A4是從一系列的一些標識符(整數)(1:5),其也被填充四維陣列爲新的座標。
  • v是一個值(雙倍),例如測量結果。

我現在想要的是將這個列表轉換成維度爲(5,5,5,5)的四維數組,其中每個v都放在正確的座標上。

這可以很容易地使用for循環來完成,但是由於我有很多數據,所以這是不可行的。

如果我剛一個維,我會做somesthing這樣的:

a1 = [2;5;7];   % Identifiers 
v = [17;18;19];   % Values 
b1 = (1:10)';   % Range of Identifiers 
V = zeros(10,1);  % Create result vector with correct dimensions 
idx = ismember(b1, a1); % Do the look up 
V(idx) = v;    % Insert 

我的問題:我如何才能做到這一點對於上述四維陣列不使用for循環。有沒有這樣做的「Matlab方法」?

任何幫助,非常感謝!

感謝, 賈尼奧斯奇

+0

就這樣我很清楚,你有625個觀測值,前四列代表矩陣指數,最後一列代表矩陣值? – prototoast 2012-03-03 13:37:53

+0

是的。它也可能小於此值,在這種情況下,缺失值將爲零。 – Janosch 2012-03-03 13:46:15

+0

這可以通過線性索引來完成嗎? – Janosch 2012-03-03 13:54:32

回答

1

你應該能夠做到你想要使用線性索引是什麼,以及sub2ind功能。它看起來像這樣。

x=zeros(5,5,5,5); %initialize output vector 

i = sub2ind(size(x),a1,a2,a3,a4); 

x(i) = v; 
+0

謝謝,正是我想要的! – Janosch 2012-03-03 15:04:13