简体   繁体   中英

Tri-dimensional array as multiplication of vector and matrix

I have an array A (shape = (a, 1)) and matrix B (shape = (b1, b2)). Want to multiply the latter by each element of the former to generate a tridimensional array (shape = (a, b1, b2)).

Is there a vectorized way to do this?

import numpy as np
A = np.random.rand(3, 1)
B = np.random.rand(5, 4)
C = np.array([ a * B for a in A ])

There are several ways you can achieve this. One is using np.dot , note that it will be necessary to introduce a second axis in B so both ndarrays can be multiplied:

C = np.dot(A,B[:,None])
print(C.shape)
# (3, 5, 4)

Using np.multiply.outer , as @divakar suggests:

C = np.multiply.outer(A,B)
print(C.shape)
# (3, 5, 4)

Or you could also use np.einsum :

C = np.einsum('ij,kl->ikl', A, B)
print(C.shape)
# (3, 5, 4)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM