Exécution
import numpy as np
t1 = np.arange(1,10)
t2 = np.arange(11,20)
t3 = np.concatenate((t1,t2),axis=1)
résulte en un
Traceback (most recent call last):
File "<ipython-input-264-85078aa26398>", line 1, in <module>
t3 = np.concatenate((t1,t2),axis=1)
IndexError: axis 1 out of bounds [0, 1)
pourquoi signale-t-il que l'axe 1 est hors limites?
Votre titre l'explique - un tableau 1d n'a pas de 2ème axe!
Mais cela dit, sur mon système comme sur @Oliver W.
s, il ne produit pas d'erreur
In [655]: np.concatenate((t1,t2),axis=1)
Out[655]:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18,
19])
C'est le résultat que j'attendais de axis=0
:
In [656]: np.concatenate((t1,t2),axis=0)
Out[656]:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18,
19])
Il semble que concatenate
ignore le paramètre axis
lorsque les tableaux sont à 1d. Je ne sais pas si c'est quelque chose de nouveau dans ma version 1.9, ou quelque chose d'ancien.
Pour plus de contrôle, envisagez d'utiliser les wrappers vstack
et hstack
qui étendent les dimensions du tableau si nécessaire:
In [657]: np.hstack((t1,t2))
Out[657]:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18,
19])
In [658]: np.vstack((t1,t2))
Out[658]:
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9],
[11, 12, 13, 14, 15, 16, 17, 18, 19]])
Cela est dû à la façon dont Numpy représente les tableaux 1D. Les éléments suivants utilisant reshape () fonctionneront:
t3 = np.concatenate((t1.reshape(-1,1),t2.reshape(-1,1),axis=1)
Explication: Voici la forme du tableau 1D lors de sa création initiale:
t1 = np.arange(1,10)
t1.shape
>>(9,)
'np.concatenate' et de nombreuses autres fonctions n'aiment pas la dimension manquante. Remodeler fait ce qui suit:
t1.reshape(-1,1).shape
>>(9,1)
Vous feriez mieux d'utiliser une fonction différente de Numpy appelée numpy.stack
.
Il se comporte comme MATLAB cat
.
La fonction numpy.stack
Ne nécessite pas que les tableaux aient la dimension dans laquelle ils sont concaténés.
C'est parce que vous devez le changer en deux dimensions car une dimension ne peut pas concaténer avec. En faisant cela, vous pouvez ajouter une colonne vide. Cela fonctionne si vous exécutez le code suivant:
import numpy as np
t1 = np.arange(1,10)[None,:]
t2 = np.arange(11,20)[None,:]
t3 = np.concatenate((t1,t2),axis=1)
print(t3)
Si vous avez besoin d'un tableau à deux colonnes, vous pouvez utiliser column_stack:
import numpy as np
t1 = np.arange(1,10)
t2 = np.arange(11,20)
np.column_stack((t1,t2))
Quels résultats
[[ 1 11]
[ 2 12]
[ 3 13]
[ 4 14]
[ 5 15]
[ 6 16]
[ 7 17]
[ 8 18]
[ 9 19]]