簡體   English   中英

將矩陣的每一行與其共軛轉置的numpy相乘

[英]Multiply each row of a matrix with it's conjugate transposed numpy

我有一個大小為MxNnumpy.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

xy逐個元素相乘,結果以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM