2011-03-14 9 views
0

J'ai un ensemble de données DÉSÉQUILIBRÉ contenant cinq champs comme:Modification des valeurs dans une matrice dans Matlab

a_code b_code sector year value 
1  2  15  1970 1000 
2  3  16  1971 2900 
3  2  15  1970 3900  

Je veux créer une matrice 4 dimensions dans MATLAB pour le champ « valeur ». Donc, je veux avoir un champ de valeur dans une matrice telle que M(a_code,b_code,sector,year) = value. J'ai 75 a_code, 75 b_code, 19 secteurs et 45 ans. Donc, une matrice NaN est (75,75,19,45).

Depuis mon jeu de données n'est pas équilibré (par exemple, je n'ai pas de valeur pour a_code = 3, b_code = 1, sector = 15, year = 1970), je n'ai pas de valeur pour chaque combinaison (a_code, b_code, secteur, année). Pour les valeurs indisponibles, je veux avoir NaN. Je sais comment créer une matrice quadridimensionnelle avec des valeurs NaN, mais comment remplacer ces valeurs NaN par celles de mon jeu de données?

Probablement je devrais écrire une boucle, mais je ne sais pas comment.

Répondre

1

Voici un code simple pour répondre à vos besoins:

D= [1 2 15 1970 1000; 2 3 16 1971 2900; 3 2 15 1970 3900]; 
m= min(D(:, 1: end- 1))- 1; 
shape= max(D(:, 1: end- 1))- m+ 1; 

X= NaN(shape); 
for k= 1: size(D, 1) 
    n= D(k, 1: end- 1)- m; 
    X(sub2ind(shape, n(1), n(2), n(3), n(4)))= D(k, end); 
end 
X(1, 1, 1, 1) %=> 1000 
X(2, 2, 2, 2) %=> 2900 
X(3, 1, 1, 1) %=> 3900 

Vous pouvez aimer élaborer davantage sur votre situation, il existe peut des approches plus appropriées. Par exemple, à partir de votre question, il n'est pas tout à fait clair pourquoi vous devez avoir vos données représentées en tant que tableau 4D.

+0

Fondamentalement, j'ai un ensemble de données incluant a_code b_code, secteur, année et valeurs. Mais le problème est que cet ensemble de données n'est pas équilibré, ce qui signifie que je n'ai pas de valeur pour chaque combinaison a, b, secteur et année. J'essaie donc de construire une matrice qui montrera à la fois les combinaisons disponibles et indisponibles (NaN) a, b, sectorielles et annuelles. – ozlem

+0

@ozlem: D'abord en note de fond: dans ma réponse, le vecteur «m» est «compris» dans «l'ensemble de données», mais il devrait probablement être défini par l'utilisateur. Pour le sujet principal Je ne vois toujours pas de réels bénéfices à représenter vos données en 4D-array. Veuillez en dire plus sur le traitement ultérieur que vous envisagez de faire avec votre «ensemble de données»? Essentiellement, quels sont les avantages (supposés) de la représentation 4D-array par rapport à la représentation matricielle (2D-array)? – eat

+0

Honnêtement, créer une matrice 4D était la première chose à laquelle je pouvais penser. Je suis sûr qu'il y a un meilleur moyen. Ce que je veux faire est de créer une matrice à partir du tableau ci-dessus comme M = [Na 1000 Na; Na Na Na; Na 3900 Na]. Bien sûr, ce n'est que pour le secteur = 15 et l'année = 1970. Je le ferai pour chaque année et chaque secteur. Donc, je pensais que la création d'une matrice 4D est la meilleure façon? – ozlem

Questions connexes