我对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
(解决方案针对Python3)
一个基于@AndrasDeak评论的更优雅的解决方案:
^{pr2}$
另外请注意,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)