J'ai essayé ce qui suit:
>>> a = np.array([1,2,3])
>>> b = np.array([4,5,6])
>>> np.concatenate((a,b), axis=0)
array([1, 2, 3, 4, 5, 6])
>>> np.concatenate((a,b), axis=1)
array([1, 2, 3, 4, 5, 6])
Cependant, je m'attendrais à ce qu'au moins un résultat ressemble à ceci
array([[1, 2, 3],
[4, 5, 6]])
Pourquoi n'est-il pas concaténé verticalement?
Parce que a
et b
n'ont qu'un seul axe, leur forme étant (3)
, et le paramètre axis fait spécifiquement référence à l'axe des éléments à concaténer.
cet exemple devrait clarifier ce que concatenate
fait avec axis. Prendre deux vecteurs avec deux axes, de forme (2,3)
:
a = np.array([[1,5,9], [2,6,10]])
b = np.array([[3,7,11], [4,8,12]])
concatène le long du 1er axe (lignes du 1er, puis lignes du 2ème):
np.concatenate((a,b), axis=0)
array([[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11],
[ 4, 8, 12]])
concatène le long du 2ème axe (colonnes du 1er, puis colonnes du 2ème):
np.concatenate((a, b), axis=1)
array([[ 1, 5, 9, 3, 7, 11],
[ 2, 6, 10, 4, 8, 12]])
pour obtenir le résultat que vous avez présenté, vous pouvez utiliser vstack
a = np.array([1,2,3])
b = np.array([4,5,6])
np.vstack((a, b))
array([[1, 2, 3],
[4, 5, 6]])
Vous pouvez toujours le faire avec concatenate
, mais vous devez d'abord les remodeler:
np.concatenate((a.reshape(1,3), b.reshape(1,3)))
array([[1, 2, 3],
[4, 5, 6]])
Enfin, comme proposé dans les commentaires, une façon de les modifier est d’utiliser newaxis
:
np.concatenate((a[np.newaxis,:], b[np.newaxis,:]))
Si le problème actuel est de concaténer deux tableaux à une dimension verticalement et que nous ne sommes pas concentrés sur l'utilisation de concatenate
pour effectuer cette opération, je suggérerais l'utilisation de - np.column_stack:
In []: a = np.array([1,2,3])
In []: b = np.array([4,5,6])
In []: np.column_stack((a, b))
array([[1, 4],
[2, 5],
[3, 6]])
Une fonction peu connue de numpy est d'utiliser r_
. C'est un moyen simple de construire rapidement des tableaux:
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.r_[a[None,:],b[None,:]]
print(c)
#[[1 2 3]
# [4 5 6]]
Le but de a[None,:]
est d’ajouter un axe au tableau a
.
a = np.array([1,2,3])
b = np.array([4,5,6])
np.array((a,b))
fonctionne aussi bien que
np.array([[1,2,3], [4,5,6]])
Que ce soit une liste de listes ou une liste de tableaux 1d, np.array
essaie de créer un tableau 2d.
Mais c’est aussi une bonne idée de comprendre le fonctionnement de np.concatenate
et de sa famille de fonctions stack
. Dans ce contexte, concatenate
a besoin d'une liste de tableaux 2D (ou de tout ce que np.array
deviendra un tableau 2d) en tant qu'entrées.
np.vstack
commence par boucler les entrées en s'assurant qu'elles sont au moins 2d, puis concatène. Sur le plan fonctionnel, vous élargissez vous-même les dimensions des tableaux.
np.stack
est une nouvelle fonction qui joint les tableaux sur une nouvelle dimension. Le comportement par défaut se comporte exactement comme np.array
.
Regardez le code pour ces fonctions. Si vous l’écrivez en Python, vous pouvez en apprendre beaucoup. Pour vstack
:
return _nx.concatenate([atleast_2d(_m) for _m in tup], 0)