[Numpy] Besoin d'un PRO en PYTHON

InAnyWays
2020-12-23 19:13:45

J'ai un vecteur que je dois ajouter en ligne et en colonne d'une matrice

Pour l'ajout d'une ligne, ça fonctionne bien :

matriceq6 = np.array(matriceressemblance)

array1 = np.array([0]*len(matriceq6))
array1[xmin] = smin
array1[ymin] = smin
matriceq6 = np.append(matriceq6, [array1], axis=0)

Mais dès que je veux ajouter la même array en colonne, j'y arrive plus :(
Je recalcule len(matriceq6) vu qu'elle a une ligne en plus, je transpose et j'utilise la fonction append en axis 1 mais ça marche pas :(

array2 = np.array([0]*len(matriceq6))
array2[xmin] = smin
array2[ymin] = smin
array2T = np.transpose(array2)
matriceq6 = np.append(matriceq6, [array2T], axis=1)

L'erreur :

Traceback (most recent call last):
File "C:/Users/X/PycharmProjects/pythonProject/ex3.py", line 98, in <module>
matriceq6 = np.append(matriceq6, [array2T], axis=1)
File "<__array_function__ internals>", line 5, in append
File "C:\Users\X\PycharmProjects\pythonProject\venv\lib\site-packages\numpy\lib\function_base.py", line 4671, in append
return concatenate((arr, values), axis=axis)
File "<__array_function__ internals>", line 5, in concatenate
ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 0, the array at index 0 has size 9 and the array at index 1 has size 1

InAnyWays
2020-12-23 19:15:09

J'paie 3 cents Paypal

AbeilleL
2020-12-23 19:17:08

Ton tableau de départ n'a qu'une dimension
Pour initialiser un tableau de zéros : np.zeros((taille voulue))

Epictogramme
2020-12-23 19:17:41

Utilise numpy.concatenate (regarde la doc) :ok:

StrattonOakmont
2020-12-23 19:18:05

Au pire fait une boucle for et ajoute les termes un à un après avoir rajouté un terme dans chaque ligne.

InAnyWays
2020-12-23 19:18:23

Le 23 décembre 2020 à 19:17:08 AbeilleL a écrit :
Ton tableau de départ n'a qu'une dimension
Pour initialiser un tableau de zéros : np.zeros((taille voulue))

Tu parles de ma matriceq6 ?
Elle me donne ça, c'est bien à deux dimensions, non ? :(

https://image.noelshack.com/fichiers/2020/52/3/1608747485-image-2020-12-23-191806.png

AbeilleL
2020-12-23 19:20:22

Le 23 décembre 2020 à 19:18:23 InAnyWays a écrit :

Le 23 décembre 2020 à 19:17:08 AbeilleL a écrit :
Ton tableau de départ n'a qu'une dimension
Pour initialiser un tableau de zéros : np.zeros((taille voulue))

Tu parles de ma matriceq6 ?
Elle me donne ça, c'est bien à deux dimensions, non ? :(

https://image.noelshack.com/fichiers/2020/52/3/1608747485-image-2020-12-23-191806.png

Non array1
Essaie np.zeros(np.shape(matriceq6)) si tu veux qu'il ait la même tête

InAnyWays
2020-12-23 19:21:53

Le 23 décembre 2020 à 19:20:22 AbeilleL a écrit :

Le 23 décembre 2020 à 19:18:23 InAnyWays a écrit :

Le 23 décembre 2020 à 19:17:08 AbeilleL a écrit :
Ton tableau de départ n'a qu'une dimension
Pour initialiser un tableau de zéros : np.zeros((taille voulue))

Tu parles de ma matriceq6 ?
Elle me donne ça, c'est bien à deux dimensions, non ? :(

https://image.noelshack.com/fichiers/2020/52/3/1608747485-image-2020-12-23-191806.png

Non array1
Essaie np.zeros(np.shape(matriceq6)) si tu veux qu'il ait la même tête

L'array 1 j'arrive bien à l'intégrer, c'est l'array2 qui bloque

AbeilleL
2020-12-23 19:24:59

Le 23 décembre 2020 à 19:21:53 InAnyWays a écrit :

Le 23 décembre 2020 à 19:20:22 AbeilleL a écrit :

Le 23 décembre 2020 à 19:18:23 InAnyWays a écrit :

Le 23 décembre 2020 à 19:17:08 AbeilleL a écrit :
Ton tableau de départ n'a qu'une dimension
Pour initialiser un tableau de zéros : np.zeros((taille voulue))

Tu parles de ma matriceq6 ?
Elle me donne ça, c'est bien à deux dimensions, non ? :(

https://image.noelshack.com/fichiers/2020/52/3/1608747485-image-2020-12-23-191806.png

Non array1
Essaie np.zeros(np.shape(matriceq6)) si tu veux qu'il ait la même tête

L'array 1 j'arrive bien à l'intégrer, c'est l'array2 qui bloque

Oui c'est pareil, c'est un tableau 1D

InAnyWays
2020-12-23 19:27:16

Le 23 décembre 2020 à 19:24:59 AbeilleL a écrit :

Le 23 décembre 2020 à 19:21:53 InAnyWays a écrit :

Le 23 décembre 2020 à 19:20:22 AbeilleL a écrit :

Le 23 décembre 2020 à 19:18:23 InAnyWays a écrit :

Le 23 décembre 2020 à 19:17:08 AbeilleL a écrit :
Ton tableau de départ n'a qu'une dimension
Pour initialiser un tableau de zéros : np.zeros((taille voulue))

Tu parles de ma matriceq6 ?
Elle me donne ça, c'est bien à deux dimensions, non ? :(

https://image.noelshack.com/fichiers/2020/52/3/1608747485-image-2020-12-23-191806.png

Non array1
Essaie np.zeros(np.shape(matriceq6)) si tu veux qu'il ait la même tête

L'array 1 j'arrive bien à l'intégrer, c'est l'array2 qui bloque

Oui c'est pareil, c'est un tableau 1D

array1 = np.zeros(np.shape(matriceq6))

Et ça je l'utilise en initialisation à la place de array1 = np.array([0]*len(matriceq6))
?

Azerban
2020-12-23 19:27:22

Ton deuxième tableau doit également être en 2 dimensions avec la méthode append : https://www.kite.com/python/answers/how-to-add-a-column-to-a-numpy-array-in-python

Utilise la méthode insert à la place.

InAnyWays
2020-12-23 19:30:50

J'me sens vraiment débile mais j'y arrive pas :rire:

AbeilleL
2020-12-23 19:32:53

Ce que je ferais:
matriceq6 est de taille M par N
tu initialises un tableau A de zéros de taille (M+1) par (N+1)
A[:M-1,:N-1]=matriceq6
A[:,N]=vecteur colonne à ajouter
A[M,:]=vecteur ligne à ajouter
A est ton tableau final

InAnyWays
2020-12-23 19:35:12

Le 23 décembre 2020 à 19:32:53 AbeilleL a écrit :
Ce que je ferais:
matriceq6 est de taille M par N
tu initialises un tableau A de zéros de taille (M+1) par (N+1)
A[:M-1,:N-1]=matriceq6
A[:,N]=vecteur colonne à ajouter
A[M,:]=vecteur ligne à ajouter
A est ton tableau final

Ok je comprends l'idée, je vais essayer.
Le tableau A, je dois l'initialiser en np.array ou en np.matrix?

AbeilleL
2020-12-23 19:36:04

Le 23 décembre 2020 à 19:35:12 InAnyWays a écrit :

Le 23 décembre 2020 à 19:32:53 AbeilleL a écrit :
Ce que je ferais:
matriceq6 est de taille M par N
tu initialises un tableau A de zéros de taille (M+1) par (N+1)
A[:M-1,:N-1]=matriceq6
A[:,N]=vecteur colonne à ajouter
A[M,:]=vecteur ligne à ajouter
A est ton tableau final

Ok je comprends l'idée, je vais essayer.
Le tableau A, je dois l'initialiser en np.array ou en np.matrix?

np.zeros(), qui te donne un array

FionDuParadoxes
2020-12-23 19:36:52

Si tu veux ajouter une colonne tu peux utiliser np.c_ je crois :(

Edit : si t'as matrice M tu ajoutes une colonne en faisant M = np.c_[M, array que tu veux ajouter en colonne]

Azerban
2020-12-23 19:41:51

array2T = np.reshape(array2T, (len(array2T), -1))
matriceq6 = np.append(matriceq6, array2T, axis=1)

AbeilleL
2020-12-23 19:53:18

Le 23 décembre 2020 à 19:49:31 Callibistrys a écrit :

Le 23 décembre 2020 à 19:45:14 AbeilleL a écrit :

Le 23 décembre 2020 à 19:40:29 Callibistrys a écrit :

Le 23 décembre 2020 à 19:32:53 AbeilleL a écrit :
Ce que je ferais:
matriceq6 est de taille M par N
tu initialises un tableau A de zéros de taille (M+1) par (N+1)
A[:M-1,:N-1]=matriceq6
A[:,N]=vecteur colonne à ajouter
A[M,:]=vecteur ligne à ajouter
A est ton tableau final

Ca dépend des tailles des formes linéaires/vecteurs à concaténer, mais si tu veux faire grandir la matrice d'une ligne et une colonne à la fin, alors l'un au moins des deux vecteurs est de taille N+1 ou M+1. Soit il va falloir écraser la dernière composante d'un des deux vecteurs la remplacer par la dernière de l'autre (si les tailels sont N+1 et M+1), soit il va falloir qu'un des deux vecteurs remplisse à lui seul une ligne étendue ou un colonne étendue (un seul des deux a une taille N+1 ou M+1)
A supposer que les formes linéaires/vecteurs à concaténer au départ et à l'arrivée aient la bonne taille, ton truc écrase la dernière case du vecteur

Comme il construit ses array1 et array2 de la même façon, je pense que ça ne change pas grand chose

Je le redis avec des mots non mathématiques pour l'auteur.

S'il fait deux fonctions distinctes, une qui concétène une ligne et une autre qui concatène une colonne (en s'assurant d'avoir les bonnes dimensions), alors il n'y a rien à dire.
Mais s'il fait une fonction qui prend deux vecteurs et qui concatène le premier en colonne et le second en ligne, alors il obtient une fonction différente de celle qui concatène le premier en ligne et le second en colonne.
Dans le cas particulier de matrices carrée, il n'aura aucune erreur qui apparaitra mais son code risque de faire autre chose que ce qu'il devrait.

Sa matrice de départ est carrée avec des zéros sur la diagonale donc je pense que ses vecteurs sont de taille N et que la case [NN] reste a 0
Après effectivement s'il veut faire quelque chose de plus général il faut faire attention aux tailles

Callibistrys
2020-12-23 19:57:31

Il est parti de toute façonhttps://image.noelshack.com/fichiers/2018/29/6/1532128784-risitas33.png

Infos
Gestion du forum

contact@geevey.com

API disponible. Utilisez le paramètre "api" en GET, peu importe le contenu, sur une page du site.

Notes

    Partenaire: JVFlux
    Ce site n'est pas associé à Jeuxvideo.com ou Webedia. Nous utilisons seulement des archives publiques.
    Il est inutile de me spammer par e-mail pour supprimer un topic. Au contraire, en conséquence, je mettrais votre topic dans le bloc ci-dessous.
Non-assumage
    Personne n'a pas assumé de topic pour le moment.