2 votes

MATLAB : Transformer une liste de fichiers plats en un tableau multidimensionnel

Je suis complètement bloqué avec ceci: je commence avec un type de liste de fichiers plats que j'obtiens d'une déclaration SQL comme ceci et je veux le transformer en un tableau 4D.

SÉLECTION a1, a2, a3, a4, v DE la table A;

a1 a2 a3 a4 v
--------------
2 2 3 3 100
2 1 2 2 200
3 3 3 3 300 
...
  • a1 à a4 sont des identificateurs (entiers) d'une plage de (1 à 5), qui sont également les coordonnées du nouveau tableau 4D à remplir.
  • v est une valeur (double) par exemple un résultat d'une mesure.

Mon objectif est maintenant de transformer cette liste en un tableau 4D de dimension (5,5,5,5) où chaque v est placé aux bonnes coordonnées.

Cela pourrait facilement être fait en utilisant une boucle for, cependant comme j'ai beaucoup de données, ce n'est pas vraiment réalisable.

Si je n'avais qu'une dimension, je ferais quelque chose comme ceci :

a1 = [2;5;7];           % Identifiants
v = [17;18;19];         % Valeurs
b1 = (1:10)';           % Plage d'identifiants
V = zeros(10,1);        % Créer un vecteur de résultat avec les bonnes dimensions
idx = ismember(b1, a1); % Faire la recherche
V(idx) = v;             % Insérer

Ma question: Comment puis-je faire cela pour le tableau 4D mentionné ci-dessus sans utiliser une boucle for. Y a-t-il une "façon MATLAB" de le faire?

Toute aide est grandement appréciée!

Merci, Janosch

1voto

prototoast Points 453

Vous devriez pouvoir faire ce que vous voulez en utilisant l'indexation linéaire et la fonction sub2ind. Cela ressemblerait à quelque chose comme ceci.

x=zeros(5,5,5,5); %initialiser le vecteur de sortie

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

x(i) = v;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X