ValueError: tous les tableaux doivent avoir le même nombre de dimensions
Je vais avoir un problème avec np.append
.
Je suis en train de dupliquer la dernière colonne de 20x361 matrice n_list_converted
en utilisant le code ci-dessous:
n_last = []
n_last = n_list_converted[:, -1]
n_lists = np.append(n_list_converted, n_last, axis=1)
Mais j'obtiens l'erreur:
ValueError: tous les tableaux doivent avoir le même nombre de dimensions
Cependant, j'ai vérifié les dimensions de la matrice en faisant
print(n_last.shape, type(n_last), n_list_converted.shape, type(n_list_converted))
et je reçois
(20L,) (20L, 361L)
donc les dimensions match? Où est l'erreur?
- Essayez
np.column_stack
. - Il a travaillé! Mais pourquoi?
Vous devez vous connecter pour publier un commentaire.
Si je commence avec un 3x4 tableau, et concaténer une 3x1 tableau, avec l'axe 1, j'obtiens un 3x5 tableau:
Remarque que les deux entrées pour concaténer ont 2 dimensions.
Omettre le
:
, etx[:,-1]
est (3,) forme - il est 1d, et donc l'erreur:Le code pour
np.append
est (dans ce cas où l'axe est spécifié)Donc, avec un léger changement de syntaxe
append
œuvres. Au lieu d'une liste de il prend 2 arguments. Il imite la listeappend
est de la syntaxe, mais ne doit pas être confondue avec cette méthode de la liste.np.hstack
d'abord fait en sorte que toutes les entrées sontatleast_1d
, et puis concaténer:Donc il exige la même
x[:,-1:]
d'entrée. Essentiellement la même action.np.column_stack
fait également concaténer sur l'axe 1. Mais d'abord, il passe 1d intrants par le biais deIl s'agit d'un moyen de transformer des que (3,) array dans un (3,1) tableau.
Tous ces "piles" peut être pratique, mais dans le long terme, il est important de comprendre les dimensions et la base
np.concatenate
. Aussi savoir comment trouver le code pour les fonctions de ce genre. J'utilise leipython
??
magie beaucoup.Et dans le temps, les tests, les
np.concatenate
est sensiblement plus rapide - avec un petit tableau, les couches supplémentaires d'appels de fonction qui fait une grosse différence de temps.(n) et (n,1) ne sont pas la même forme. Lancez le vecteur d'un tableau à l'aide de la
[:, None]
notation:Sinon, lors de l'extraction de
n_last
vous pouvez utiliserpour obtenir un
(20, 1)
tableau.La raison pour laquelle vous obtenez votre erreur est parce que "1 à n" matrice est différente à partir d'un tableau de longueur n.
Je recommande d'utiliser
hstack()
etvstack()
à la place.Comme ceci:
Avis répétées "7, 15, 23, 31" de la colonne.
Aussi, notez que j'ai utilisé
a[:,-1:]
au lieu dea[:,-1]
. Ma version génère une colonne:Au lieu d'une ligne
array([7,15,23,31])
Edit:
append()
est beaucoup plus lent. Lire cette réponse.np.append
est plus lente que la liste.append
; mais comparable à lastacks
. Il utilisenp.concatenate
.append
vsstack
est de même avec les 2 matrices etstack
est mieux pour plus de 2 éléments, de sorte questack
est toujours au moins aussi bon queappend
.Vous pouvez également cast (n) à (n,1) en plaçant à l'intérieur de crochets [ ].
par exemple au Lieu de
np.append(b,a,axis=0)
utilisationnp.append(b,[a],axis=0)
retourne