Numpy ndarray multiplication

前端 未结 2 1310
[愿得一人]
[愿得一人] 2021-01-21 05:33

I have two 3D numpy ndarray

A=np.array([[[1, 1],
             [1, 1],
             [1, 1]],

            [[2, 2],
             [2, 2],
             [2, 2]]])

B=         


        
相关标签:
2条回答
  • 2021-01-21 06:10

    On a sufficiently recent NumPy (1.10+), you can do

    AB = np.matmul(A, B)
    

    or (if you also have Python 3.5+):

    AB = A @ B
    

    If you don't have NumPy 1.10+, you can do

    AB = np.einsum('ijm,imk->ijk', A, B)
    

    For large J/M/K dimensions, especially if you have a good BLAS, it might also be worth considering the explicit for loop with dot. The BLAS matrix multiply might save more time than the overhead of more interpreted Python loses. I think np.matmul and @ are supposed to take advantage of the same things dot does, but I don't think np.einsum does.

    0 讨论(0)
  • 2021-01-21 06:14

    ABijk=∑m (Aijm*Bimk) translates to

    AB = np.einsum('ijm,imk->ijk', A, B)
    

    I think the matmul operator will also handle this

    AB = A @ B
    

    since it takes the normal dot on the the last 2 dimensions, carrying the rest along as free baggage.

    Test those and let me know if they work.

    0 讨论(0)
提交回复
热议问题