IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Remplir une matrice 3D à partir d'un tableau 2D


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut Remplir une matrice 3D à partir d'un tableau 2D
    Bonjour a tous,

    Voila un moment que je me casse la tete sur un probleme d'algo simple.

    j'ai un tableau de chiffre de dimension 4x151, ces chiffres correspondent a des valeur physique en 3D,nomme x, y z ; 11x11x5. Je souhaite remplir ce tableau en 3D par les valeurs du tableau 2D (4x151).
    Mais depuis 2 heures je tourne autours du pot .. surtout en essayant de lire dans l'ordre (gauche a droite, haut vers le bas) le tableau 2D et remplir la cellule correspondante (x,y,z). Peut-etre serait-il mieux de d'abord transformer mon tableau 2D en un format differend comme 11x55? De la je sais que chaque ligne correspond a un y et donc si je prends 5 paquets de 11x11 je peux remplir mon tableau (x,y,z), mais je ne parviens pas a l'ecrire algorythmiquement parlant. Je sens bien que c'est pas bien mechant..

    Des suggestions, directions ?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 423
    Points : 8 700
    Points
    8 700
    Billets dans le blog
    43
    Par défaut
    4 x 151 = 604
    5 x 11 x 11 = 605

    Problème...

    Sinon, pense à "linéariser" tes deux tableaux.
    Tutoriels et FAQ TypeScript

  3. #3
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Le pseudo-code pour ton "algo" :

    Soit m une matrice 5 par 151.
    Soit n une matrice 5 par 11 par 11.

    Soit x,y des entiers.
    On fait varié x de 1 à 5 (ou de 0 à 4 en fonction de l'index de début.)
    On fait varié y de 1 à 151
    Soit a et b des entiers.
    a prend la valeur y modulo 11.
    b prend la valeur y divisé par 11
    On affecte la valeur de m (x,y) à n(x,a,b)
    Fin de la variation de y
    Fin de la variation de X

    Une variante serai de faire varié y de 1 à 11 et z de 1 à 11 et d'accéder à m via (x,y*11+z)

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Citation Envoyé par DJEcalcul Voir le message
    Bonjour a tous,

    Voila un moment que je me casse la tete sur un probleme d'algo simple.

    j'ai un tableau de chiffre de dimension 4x151, ces chiffres correspondent a des valeur physique en 3D,nomme x, y z ; 11x11x5. Je souhaite remplir ce tableau en 3D par les valeurs du tableau 2D (4x151).
    Mais depuis 2 heures je tourne autours du pot .. surtout en essayant de lire dans l'ordre (gauche a droite, haut vers le bas) le tableau 2D et remplir la cellule correspondante (x,y,z). Peut-etre serait-il mieux de d'abord transformer mon tableau 2D en un format differend comme 11x55? De la je sais que chaque ligne correspond a un y et donc si je prends 5 paquets de 11x11 je peux remplir mon tableau (x,y,z), mais je ne parviens pas a l'ecrire algorythmiquement parlant. Je sens bien que c'est pas bien mechant..

    Des suggestions, directions ?

    Merci.
    ??? ???


    Je vais recopier ton message, mais avec des nombres plus petits :
    j'ai un tableau de chiffre de dimension 4x11, ces chiffres correspondent a des valeur physique en 3D,nomme x, y z ; 3x3x5. Je souhaite remplir ce tableau en 3D par les valeurs du tableau 2D (4x11).

    On est maintenant sur des données qui peuvent parfaitement être traitées manuellement.

    Essaie de faire ligne à ligne, à la main, les différentes étapes de ton besoin. Tu as un tableau de 4x11 , tu mets des chiffres au hasard dans ce tableau.
    Et à la main, tu construis un tableau de 3x3x5, avec le résultat voulu.

    Soit tu réussis à le faire à la main... et alors tu seras en mesure de reformuler ton besoin de façon compréhensible.
    Soit tu ne réussis pas à le faire à la main, et alors tu verras qu'il y a des incohérences dans ta demande.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Merci à vous trois.

    En quoi linéariser est plus simple que faire 5 paquets de 11x11 ?

  6. #6
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 423
    Points : 8 700
    Points
    8 700
    Billets dans le blog
    43
    Par défaut
    Ca fonctionne pour n'importe quelle dimension
    Tutoriels et FAQ TypeScript

  7. #7
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par DJEcalcul Voir le message
    Merci à vous trois.

    En quoi linéariser est plus simple que faire 5 paquets de 11x11 ?
    Et selon le langage tu assures la continuité en mémoire, ce qui permet au compilateur d'accélérer fortement le traitement des données.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Merci a vous, voila de preciseuses infos.

    En revanche je vois pas comment parcourir la "ligne" pour remplir ma matrice 3D.

    Du coup j'ai une matrice A[i*j*k] et je veux remplir B[i,j,k]. Quel indice du tableau ainsi linearise correspond a ma matrice en 3D ?

  9. #9
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Tu dois apprendre les modulo à un moment !

    Pour une une ligne représentant une matrice de taille i*j*k
    l'index X est divisible en :
    i = X/(j*k); // On divise par le nombre d'élément contenu dans une sous matrice
    j = (X/(k)) % j ; // On divise par le nombre d'élément contenu dans une sous matrice et mon fait un modulo pour ne pas avoir la partie i
    k = X/k ; // On fait un modulo par rapport à la taille de la matrice pour n'avoir que la partie k

    C'est la base de manipulation des matrices ! Division sans reste et Modulo !

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Merci kolodz,
    Je suis pas sur de bien comprendre..
    Par exemple si je veux transformer un vecteur ligne de dimension m=12, appelons le A(X), X étant l'index, en une matrice B(i,j,k) avec i=3, j=2 et k=2.
    J'ai donc B(X/(j*k),(X/(k)) % j,X/k) ? hum .. un index doit être entier donc les quotients d'index me pose problème. Je ne pense pas comprendre ta transformation de A(X) -> B(i,j,k)

  11. #11
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Pourtant tout est là. Mise à par l'erreur sur "j = (X/(k*j)) % j" Ou il manque j bien sûr. Car le nombre d'élément de la sous matrice 2D est le nombre de ligne fois le nombre de colonne !

    Après, il faut connaitre ses opérations mathématique.
    Si on considère deux entiers a et b, (dans ce cas des index) l'opération / est la division de a par b sans reste donnant un autre entier.
    Si on considère deux entiers a et b, l'opération % est le reste de la division de a par b.

    On reprends :
    On va considérer :
    X l'index
    O la taille de la premier sous matrice
    k l'index par rapport à la premier sous matrice

    k = X%O

    Dans notre exemple :
    m=12, appelons le A(X), X etant l'index, en une matrice B(i,j,k) avec i=3, j=2 et k=2.
    O=2
    Donc si X =11
    k = 11%2 = 1

    (La valeur pouvant être 0 ou 1 dans tout les cas).


    On va considérer :
    X l'index
    O la taille de la premier sous matrice
    N la taille de la seconde sous matrice
    j l'index par rapport à la premier sous matrice

    j = (X/(O*N)) % N

    Sachant que
    N = 2
    O = 2
    j = (X%2*2)/2 = (X%4)/2
    Donc si x = 11
    k =(11%2*2)/2= (3)% =1

    X l'index
    O la taille de la premier sous matrice
    N la taille de la seconde sous matrice
    j l'index par rapport à la premier sous matrice

    i = X/(O*k);

    Donc si x = 11
    k =(11/4)= 2

    Donc A(11)= B(2,1,1)

    La liste :
    A(0)= B(0,0,0)
    A(1)= B(0,0,1)
    A(2)= B(0,1,0)
    A(3)= B(0,1,1)
    A(4)= B(1,0,0)
    A(5)= B(1,0,1)
    A(6)= B(1,1,0)
    A(7)= B(1,1,1)
    A(8)= B(2,0,0)
    A(9)= B(2,0,1)
    A(10)= B(2,1,0)
    A(11)= B(2,1,1)
    A(12)= B(3,0,0)

    La base donc !
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Voici finalement ce que je propose pour traiter mon cas:
    avec B(i,j,k)= A(i+(j-1)*n +(k-1)*n*p) Ca fonctionne parfaitement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    n=3;m=2;p=2;
    D= (1 ,    7 ,    2 ,    8,     3,     9,     4 ,   10,     5,    11,     6,    12)
     
    for i= 1:n
        for j= 1:m
            for k= 1:p
            O(i,j,k) = D(i+(j-1)*n+(k-1)*n*m)
            end
        end
    end
    Merci a tous.

    Un grand merci a kolodz

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Remplir une matrice à partir de formulaires complétés
    Par soeasytraining dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/09/2013, 18h40
  2. Réponses: 6
    Dernier message: 26/03/2009, 19h39
  3. Remplir une matrice à partir d'un vecteur (Suite)
    Par amarion dans le forum MATLAB
    Réponses: 5
    Dernier message: 17/03/2008, 08h23
  4. Remplir une matrice à partir d'un vecteur
    Par amarion dans le forum MATLAB
    Réponses: 2
    Dernier message: 10/03/2008, 12h17
  5. [SQL] Remplir une base SQL à partir d'un tableau à plusieurs lignes et colonnes
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/08/2007, 08h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo