web-dev-qa-db-fra.com

Multipliez chaque colonne d'un tableau numpy avec chaque valeur d'un autre tableau

Supposons que j'ai les deux tableaux numpy suivants:

In [251]: m=np.array([[1,4],[2,5],[3,6]])

In [252]: m
Out[252]: 
array([[1, 4],
       [2, 5],
       [3, 6]])

In [253]: c= np.array([200,400])

In [254]: c
Out[254]: array([200, 400])

Je voudrais obtenir le tableau suivant en une étape, mais pour ma vie, je ne peux pas le comprendre:

In [252]: k
Out[252]: 
array([[200, 800, 400, 1600],
       [400, 1000, 800, 2000],
       [600, 1200, 1200,2400]])
5
Pearly Spencer

La transformation que vous souhaitez s'appelle le produit Kronecker. Numpy a cette fonction comme numpy.kron:

In [1]: m = np.array([[1,4],[2,5],[3,6]])

In [2]: c = np.array([200,400])

In [3]: np.kron(c, m)
Out[3]: 
array([[ 200,  800,  400, 1600],
       [ 400, 1000,  800, 2000],
       [ 600, 1200, 1200, 2400]])
11
myrtlecat

Vous pouvez utiliser np.concatenate avec la compréhension de liste:

np.concatenate([m * x for x in c], axis=1)

Cela vous donne

array([[ 200,  800,  400, 1600],
       [ 400, 1000,  800, 2000],
       [ 600, 1200, 1200, 2400]])
1
Yilun Zhang