如何将matlab中的矩阵运算符转换为python

how to convert matrix operators in matlab to python

我想将以下 Matlab 代码转换为 Python 中的等效代码:

M.*((S*U)./max(realmin, M*(U'*U)))

其中:

S: n*n
M: n*m
U: n*m

我已经通过以下代码完成了:

x = (max(-sys.maxint, np.matmul(M, np.matmul(np.transpose(U), U))))
M = np.dot(M, ((np.matmul(S, U)) / x))

但我收到以下错误:

x = (max(-sys.maxint, np.matmul(M, np.matmul(np.transpose(U), U))))
ValueError: The truth value of an array with more than one element is 
ambiguous. Use a.any() or a.all()

请问如何将 Matlab 代码转换为 Python。

Matlab 的max(a, b) 是广播元素最大操作。 Python 的 max(a, b) 不是。 Python 的 max 不理解数组,你不应该在数组上使用它。

对于广播元素最大值,您需要 numpy.maximum:

numpy.maximum(whatever, whatever)

此外,Matlab 的 realminsmallest positive normalized double-precision floating-point number, while Python's sys.maxint is a large negative int(在 Python 3 上也不存在)。那可能不是你想要的。相当于 Matlab 的 realmin 将是

sys.float_info.min

numpy.finfo(float).tiny

numpy.finfo(float).min 是另一回事。)