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

Calcul scientifique Python Discussion :

numpy issue - ValueError input array dimensions


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Points : 33
    Points
    33
    Par défaut numpy issue - ValueError input array dimensions
    Bonjour, voilà ça fait quelque temps que je coince sur ce bout de code et je n'arrive pas à comprendre. J'ai un programme que je dois traduire de matlab en python et je bloque totalement sur une ligne : le code matlab est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Natoms(1:6,:) = [Nexcess Natoms(1:6,1:L-1)];  % L=101 et Nexcess est une matrice 6 lignes et 1 colonne
    et mon code en python est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Natoms[:5,:]=np.concatenate((Nexcess,Natoms[:5,:L-1]),axis=0)
    et mon erreur est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Natoms[:5,:]=np.concatenate((Nexcess,Natoms[:5,:L-1]),axis=0)
    ValueError: all the input array dimensions except for the concatenation axis must match exactly
    Je ne comprend pas l'erreur dans ma traduction sachant que ça marche pour matlab.. Merci bcp

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par TNema Voir le message
    Je ne comprend pas l'erreur dans ma traduction sachant que ça marche pour matlab.. Merci bcp
    Il faudrait commencer par regarder à quoi ressemble le résultat de Natoms[:5,:L-1].
    Normalement, cela devrait vous indiquer le pourquoi du message d'erreur.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    À la base Natoms=np.zeros((6,L)). Donc c'est bien de 0 à 5 en python, je pense pas me tromper..

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par TNema Voir le message
    À la base Natoms=np.zeros((6,L)). Donc c'est bien de 0 à 5 en python, je pense pas me tromper..
    Il ne faut pas penser mais vérifier et comprendre pourquoi numpy n'en veut pas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Oui je suis d'accord, j'avais évidemment déjà vérifié avant de vous posez ma question

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par TNema Voir le message
    Oui je suis d'accord, j'avais évidemment déjà vérifié avant de vous posez ma question
    Et bien vous vérifiez 3 fois car numpy ne se trompe pas.
    S'il vous dit que vos dimensions ne sont pas cohérentes avec ce qu'il attend, c'est que vous devez argumenter un peu en postant la dimension des deux matrices concernées avant d'essayer de faire le "concatenate" qui va retourner l'erreur.
    note: Le mieux serait de poster un code qui permette de reproduire le problème.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    J'ai recommencé et afficher tous mes paramètres depuis le début et il y avait bien une erreur de dimension loin dans le code, je l'ai corrigé

    Juste une autre petite question. J'ai cette ligne de code qui marche sous matlab :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eps_min = a*M*Es/(Zi*Z(t)*e2*(Mi+M));
    or en python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eps_min=dot(dot(a,M),Es) / dot(dot(dot(Zi,Z[t]),e2),(Mi + M))
    il y a un problème de dimension au niveau de alors que print(Es) -> [[4.72 1. 1.51 7.37 1. 7.37]] et print(dot(a,M)) -> [[4.62708926e-08 1.65253188e-09 3.30506376e-08 1.98303825e-08 1.65253188e-09 1.98303825e-08]]
    Ceux sont deux matrices 1*6 donc impossible de multiplié et pourtant ça marche sous matlab.. auriez-vous une idée ?

  8. #8
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par TNema Voir le message
    Juste une autre petite question. J'ai cette ligne de code qui marche sous matlab :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eps_min = a*M*Es/(Zi*Z(t)*e2*(Mi+M));
    or en python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eps_min=dot(dot(a,M),Es) / dot(dot(dot(Zi,Z[t]),e2),(Mi + M))
    il y a un problème de dimension au niveau de alors que print(Es) -> [[4.72 1. 1.51 7.37 1. 7.37]] et print(dot(a,M)) -> [[4.62708926e-08 1.65253188e-09 3.30506376e-08 1.98303825e-08 1.65253188e-09 1.98303825e-08]]
    Ceux sont deux matrices 1*6 donc impossible de multiplié et pourtant ça marche sous matlab.. auriez-vous une idée ?
    Si on veut multuplier 2 matrices élément par éléments, alors inutile de faire appelle à la fonction np.dot.
    Si par contre vous voulez un produit scalaire, alors il vous faut 2 vecteurs ( de taille (6,) ) et non 2 matrices de taille (1,6) !

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    D'accord merci pour les conseils j'ai réussi à résoudre le problème.
    Une autre petite question j'ai une matrice Natoms 6*101 tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    print(Natoms[:,:])
    [[1.29226424e+80 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00]
     [1.29226424e+80 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00]
     [1.29226424e+80 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00]
     [1.29226424e+80 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00]
     [1.29226424e+80 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00]
     [1.29226424e+80 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
      0.00000000e+00]]
    Je veux faire des calculs dessus et prendre le vecteurs du premier éléments de toutes lignes donc je fais ça: ça me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [1.29226424e+80 1.29226424e+80 1.29226424e+80 1.29226424e+80
     1.29226424e+80 1.29226424e+80]
    qui est une matrice ligne et pas une matrice colonne comme je l'attend et qui d'ailleurs n'ai même pas une matrice il n'y a pas les [[ ]].. une idée ? (J'ai le même problème sur une autre matrice) J'ai relu les tutos mais je vois pas..

  10. #10
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Il y a autant de pair de crochets imbriqués que la dimension de ton objet.
    Un vecteur est de dimension 1, []
    Une matrice est de dimension 2,[[]]
    Un tableau 3D, est de dimension 3, [[[]]]

    Donc si tu prend une colonne, c'est un vecteur, donc de dimension 1. Car par définition, il n'y a pas de notion de vecteur ligne ou de vecteur colonne en informatique. Un vecteur est une liste 1D. Un vecteur colonne peut éventuellement être représenté par les plus puériste comme une matrice de taille Nx1.

    Après il faut voir quel genre de calcul as tu besoin de faire avec ce vecteur, car dans la majorité des cas, ce n'est pas pertinent de forcer la syntaxe colonne.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Oui ma question était un peu débile enft mais super merci pour l'explication . C'est pour faire le calcul suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Natoms[0:6,0] = np.array(Natoms[0:6,0]-Nexcess)
    avec Natoms[0:6,0]=
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [1.29226424e+80 1.29226424e+80 1.29226424e+80 1.29226424e+80
     1.29226424e+80 1.29226424e+80]
    et Nexcess =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [[7.75358542e+80]
     [7.75358542e+80]
     [7.75358542e+80]
     [7.75358542e+80]
     [7.75358542e+80]
     [7.75358542e+80]]
    ça me renvoie l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValueError: could not broadcast input array from shape (6,6) into shape (6)
    (ce calcul marche avec matlab)

  12. #12
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    On s'en moque du contenu.

    Python te dit clairement qu'il y a un problème sur les tailles. Donc, affiches les tailles !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print(Natoms[0:6,0].shape)
    print(Nexcess.shape)
    print((Natoms[0:6,0]-Nexcess).shape)

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    ça me renvoie ça : mais je comprend pas pourquoi (6,6)

  14. #14
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Tu fais une soustraction entre un vecteur de taille 6 (1 dimension donc) et une matrice de taille 6x1 (2 dimensions). C'est comme donc additionner des patates et des voitures. Ca n'a aucun sens.
    Python fait donc ce qu'il peut avec cette incohérence et élargit tout à des matrices 6x6 pour pouvoir réaliser les opérations. Ce n'est certainement pas ce que tu veux. Il faut donc lui filer dans la soustraction des données consistantes.

    Indice :

    L'opérateur flatten permet d'applatir n'importe qu'elle matrice en un vecteur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(Nexcess.flatten())

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    D'accord merci beaucoup pour toutes ces explications, donc ça me renvoie le tout sous la forme d'un vecteur donc le np.array ne sert à rien

  16. #16
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par TNema Voir le message
    D'accord merci beaucoup pour toutes ces explications, donc ça me renvoie le tout sous la forme d'un vecteur donc le np.array ne sert à rien
    Tout à fait. Et si tu ne fais que des opérations consistantes entre numpy.array, ca te renverra toujours des numpy.array (donc si tu as des np.array(x) dans ton code et que x est lui meme un array, et bien tu peux virer le np.array devant et ne garder que x)

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    je me permet de te re-demandé, dans une situation où j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Natoms[0:6,:] = Natoms[0:6,1:]+Natoms[0:6,-1]
    (6, 101)
    (6, 100)
    (6,)
    Ici je veux bien supprimer la première colonne de Natoms et la remplacer par la dernière mais comme tu m'a dis (6,) est un vecteur et (6,100) une matrice et je ne peux pas faire Natoms[0:6,1:].flatten() ici ça me donne une dimension (600,) et ça ne marche pas. Je peux faire comment ? j'ai essayé np. append, np.insert ou transformé le vecteur en matrice ça ne marche pas

  18. #18
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import numpy as np
     
    Natoms = np.array(list(range(6*101))).reshape(6,101)
     
    Natoms = np.hstack(( Natoms[0:6,1:],Natoms[0:6,-1:] ))
    La petite subtilité ici est que Natoms[0:6,-1:] et Natoms[0:6,-1] ne te renvoie pas la même chose (seul un : diffère). Affiche les, tu verras. Car dans un cas tu réclame un indice particulier dans une dimension, donc cette dimension disparait dans le résultat. Dans l'autre cas tu demandes un slice d'indice (donc une liste). Certes ce slice ne contient qu'un seul élément mais c'est un slice. Donc numpy va te retourner un résultat ayant autant de dimension que la matrice de départ (ici 2 dimensions).


    Une autre possibilité aussi aurait été de mettre à jour les valeur de ta matrice vu qu'elle ne cahnge pas de dimension. Et de faire ca en deux fois, car le +, c'est une somme, ce n'est pas du tout une concaténation en numpy. Donc faire en une première fois pour dire que tu décale les colonnes, en écrasant la 1ere, puis 2eme étape rien à faire en faite puisque tu laisse la dernière à sa valeur.

    Donc ceci fonctionne aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Natoms[0:6,:-1] = Natoms[0:6,1:]

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    OK merci j'ai super bien compris ! Et ça marche nickel, j'ai pris la deuxième solution du coup

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Chargé de référencement
    Inscrit en
    Septembre 2018
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Chargé de référencement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Y-a-t-il un tuto bien expliqué pour l'utilisation du formatting text sous python ? Je vous écrire dans un fichier text différentes valeurs provenant de matrices/vecteurs. Comme sous matlab avec ce code par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    file_1=open('output_total.txt','w')
    fprintf(file_1,'1       2       3       Incident ion  \r\n');
    fprintf(file_1,'%.4f %.4f %.4f %.4f \r\n',concentration);
    j'ai un peu chercher mais je ne trouve pas de tuto clair

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/09/2015, 18h30
  2. Réponses: 11
    Dernier message: 29/10/2012, 14h00
  3. insertion de données issues d'un array sans boucles de type for each ou while.
    Par piotrowski-s dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 05/09/2012, 11h27
  4. [RegExp] Comment créer un regexp variable issu d'un array ?
    Par Targan dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/09/2011, 12h05
  5. Réponses: 6
    Dernier message: 19/10/2009, 12h10

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