La solution de JoshAdel utilise np.newaxis pour ajouter une dimension. Une alternative consiste à utiliser reshape() pour aligner les dimensions en préparation à la diffusion.
data = np.array([[1,1,1],[2,2,2],[3,3,3]])
vector = np.array([1,2,3])
data
# array([[1, 1, 1],
# [2, 2, 2],
# [3, 3, 3]])
vector
# array([1, 2, 3])
data.shape
# (3, 3)
vector.shape
# (3,)
data / vector.reshape((3,1))
# array([[1, 1, 1],
# [1, 1, 1],
# [1, 1, 1]])
Effectuer le reshape() permet d'aligner les dimensions pour la diffusion :
data: 3 x 3
vector: 3
vector reshaped: 3 x 1
Notez que data/vector
est correct, mais cela ne vous donne pas la réponse que vous souhaitez. Cela divise chaque colonne du array
(au lieu de chaque ligne) par chaque élément correspondant du vector
. C'est ce que vous obtiendriez si vous remodeliez explicitement vector
pour être 1x3
au lieu de 3x1
.
data / vector
# array([[1, 0, 0],
# [2, 1, 0],
# [3, 1, 1]])
data / vector.reshape((1,3))
# array([[1, 0, 0],
# [2, 1, 0],
# [3, 1, 1]])