2012-03-03 13 views
2

私は完全にこれに固執しています。私はこのようなSQL文から得たフラットファイルタイプのリストから始め、それを4D配列に変換したい。 A4へ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の範囲からいくつかの識別子(整数)である(1:5)、また新しい移入する4Dアレイの座標です。
  • vは値(倍精度)です。測定の結果

ここでは、このリストを次元(5,5,5,5)の4D配列に変換して、各vを右側の座標に配置します。

これは簡単にforループを使って行うことができますが、私は多くのデータを持っているので、これは実際には実現できません。

私はちょうど1次元を持っていた場合、私はこのような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 

は私の質問:どのように私はループのために使用しなくても、上記の4D配列のためにこれを行うことができます。それを行う "Matlab Way"はありますか?

ご協力いただきありがとうございます。あなたは線形インデックス、およびsub2ind機能を使ってやりたいことができるはず

おかげで、 ジャノスチ

+0

最初の4つの列が行列インデックスを表し、最後の列が行列の値を表す625の観測値がありますか? – prototoast

+0

はい。また、それよりも小さい場合もあります。その場合、欠損値はゼロになります。 – Janosch

+0

これは線形インデックス付けで行うことができますか? – Janosch

答えて

1

。それはこのようなものに見えるでしょう。

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

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

x(i) = v; 
+0

ありがとう、ちょっと私が欲しかった! – Janosch