[英]Vectorizing Numpy 3D and 2D array operation
我正在嘗試在Python中創建K MxN matrices
, A
矩陣從兩個矩陣A
和B
存儲在(M,N,K)
numpy
數組C
,形狀分別為(K, M)
和(K,N)
。 計算第一個矩陣為C0 = a0.T x b0
,其中a0
是A
的第一行, b1
是B
的第一行,第二個矩陣為C1 = a1.T x b0
,依此類推。
現在,我正在使用for循環來計算矩陣。
import numpy as np
A = np.random.random((10,800))
B = np.random.random((10,500))
C = np.zeros((800,500,10))
for k in range(10):
C[:,:,k] = A[k,:][:,None] @ B[k,:][None,:]
由於操作是獨立的,所以我想知道是否存在一些避免for循環的pythonic方法。 也許我可以對代碼進行矢量化處理,但是看不到如何完成。
In [235]: A = np.random.random((10,800))
...: B = np.random.random((10,500))
...: C = np.zeros((800,500,10))
...: for k in range(10):
...: C[:,:,k] = A[k,:][:,None] @ B[k,:][None,:]
...:
In [236]: C.shape
Out[236]: (800, 500, 10)
批處理基質產品,然后轉置
In [237]: np.allclose((A[:,:,None]@B[:,None,:]).transpose(1,2,0), C)
Out[237]: True
但是由於矩陣乘積軸的大小為1,並且沒有其他求和,所以廣播乘法也一樣好:
In [238]: np.allclose((A[:,:,None]*B[:,None,:]).transpose(1,2,0), C)
Out[238]: True
執行時間差不多
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.