gpt4 book ai didi

python - 使用 numpy 语法共轭 self 的转置

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:05 35 4
gpt4 key购买 nike

我正在尝试将此 MATLAB 代码翻译成 Python。

代码如下:

Y=C*Up(:,1:p-1)'*Y;

这是我目前的翻译:

Y = C * Up[:, 1:p-1] * Y

我在使用 MATLAb 代码中使用的 self 的共轭转置语法时遇到问题。我不确定我的第一个想法:

Y = C * Up[:, 1:p-1].getH() * Y

是正确的。

有人有什么想法吗?

最佳答案

我对 numpy 不是很有经验,但根据 @hpaulj 的评论,我可以提出以下建议:

如果您不想受到 numpy.matrix 对象的限制(请参阅警告 here ),您可以定义自己的函数来进行共轭转置。您需要做的就是转置数组,然后从结果中减去结果的虚部,乘以 2。我不确定这在计算上的效率如何,但它肯定会给出正确的结果。

我希望这样的事情能起作用:

Y = C * ctranspose(Up[:, 0:p-1]) * Y

...

def ctranspose(arr: np.ndarray) -> np.ndarray:
# Explanation of the math involved:
# x == Real(X) + j*Imag(X)
# conj_x == Real(X) - j*Imag(X)
# conj_x == Real(X) + j*Imag(X) - 2j*Imag(X) == x - 2j*Imag(X)
tmp = arr.transpose()
return tmp - 2j*tmp.imag

(解决方案适用于 Python 3)


基于 @AndrasDeak 评论的更优雅的解决方案:

Y = C * Up[:, 0:p-1].conj().T * Y

另请注意,python 和 MATLAB 之间与索引相关的两个差异:

  • Python 是从 0 开始的(即数组的第一个索引是 0,这与 MATLAB 中的 1 不同)
  • Python 中的索引是inclusive:exclusive,这与 MATLAB 中的inclusive:inclusive 不同。

因此,当我们想在 MATLAB 中访问向量的前 3 个元素时,我们会这样写:

res = vec(1:3);

在 Python 中我们会写:

res = vec[0:3] # or [:3]

(再次感谢@Andras 的解释)

关于python - 使用 numpy 语法共轭 self 的转置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51106981/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com