[英]Multiply each row of a matrix with it's conjugate transposed numpy
我有一個大小為MxN
的numpy.ndarray
變量A
我希望將每一行與共軛轉置相乘。 對於第一行,我們將獲得:
np.matmul(np.expand_dims(A[0,:],axis=1),np.expand_dims(A[0,:].conj(),axis=0))
我們得到NxN
大小的結果。 我希望整個操作的最終結果為MxNxN
大小。
我可以通過一個簡單的循環來實現這一點,該循環遍歷A
行並連接結果。 我希望避免使用SIMD操作進行for循環以加快運行時間。 有沒有辦法在廣播的單個代碼行中做到這一點?
否則,我可以做其他事情,以某種方式將結果重塑成我的要求嗎?
下一個代碼的功能與您的代碼段相同,但沒有for循環。 另一方面,它兩次使用np.repeat
,因此您需要對兩個版本進行基准測試並進行比較以測試其內存/時間性能。
import numpy as np
m, n = A.shape
x, y = A.conj().repeat(n, axis=0), A.reshape([-1, 1]).repeat(n, axis=1)
B = (x * y).reshape([m, n, n])
x
基本上在單個列中保存數組A
的共軛值,然后在列軸上重復n
次(其形狀為m*n by n
)。
y
連續n
次重復A
的共軛矩陣中的每一行(其最終形狀也是m*n by n
)
x
和y
逐個元素相乘,結果以B
存儲在形狀為m by n by n
的矩陣中
列表理解可以解決這個問題:
result = np.array([np.matmul(np.expand_dims(A[i,:],axis=1), np.expand_dims(A[i,:].conj(),axis=0)) for i in range(A.shape[0])])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.