简体   繁体   中英

How to multiply each row of an array with all rows of an array element-wise in Python

I need to multiply each row of an array A with all rows of an array B element-wise. For instance, let's say we have the following arrays:

A = np.array([[1,5],[3,6]])
B = np.array([[4,2],[8,2]])

I want to get the following array C :

C = np.array([[4,10],[8,10],[12,12],[24,12]])

I could do this by using for loop but I think there could be a better way to do it.

EDIT: I thought of repeating and tiling but my arrays are not that small. It could create some memory problem.

Leverage broadcasting extending dims for A to 3D with None/np.newaxis , perform the elementwise multiplication and reshape back to 2D -

(A[:,None]*B).reshape(-1,B.shape[1])

which essentially would be -

(A[:,None,:]*B[None,:,:]).reshape(-1,B.shape[1])

Schematically put, it's :

A     :  M x 1 x N
B     :  1 x K x N
out   :  M x K x N

Final reshape to merge last two axes and give us (M x K*N) shaped 2D array.


We can also use einsum to perform the extension to 3D and elementwise multiplication in one function call -

np.einsum('ij,kj->ikj',A,B).reshape(-1,B.shape[1])

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