web-dev-qa-db-fra.com

Concaténation de 2 tableaux 1D numpy le long du 2e axe

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?

9
ricky_hehe

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]])
10
hpaulj

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) 
6
MLKing

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.

4
Royi

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)
0
ERIC

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]]