如何将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 的 realmin
是 smallest 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
是另一回事。)
我想将以下 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 的 realmin
是 smallest 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
是另一回事。)