2012-03-03 10 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는 (double) 값입니다. 측정 결과.

이제는이 목록을 각 차원이 오른쪽 좌표에 놓이는 차원 (5,5,5,5)의 4D 배열로 변환하는 것이 좋습니다.

이것은 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"가 있습니까?

도움을 주시면 대단히 감사하겠습니다.

덕분에, 야노 쉬

+0

625 개의 관측치가 있습니다. 첫 번째 네 개의 열은 행렬 인덱스를 나타내고, 마지막 열은 행렬 값을 나타냅니다. – prototoast

+0

예. 또한 그보다 작을 수도 있는데,이 경우 누락 된 값은 0이됩니다. – Janosch

+0

선형 인덱싱으로이 작업을 수행 할 수 있습니까? – Janosch

답변

1

당신은 당신이 선형 색인을 사용하여 원하는 일을 할 수 있어야하고, sub2ind 기능을한다. 이런 식으로 보일 겁니다.

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

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

x(i) = v; 
+0

내가 원했던 것을 고맙다. – Janosch

관련 문제