[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)
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))
?
InAnyWays
2020-12-23 19:30:50
J'me sens vraiment débile mais j'y arrive pas
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