Mehdi
Mehdi

Reputation: 117

how to convert matrix operators in matlab to python

I want to convert the following Matlab code to the equivalent in Python:

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

where:

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

I have done it by the following code:

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

but I got the following error:

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()

Would you please help me how I can convert the Matlab code to Python.

Upvotes: 0

Views: 387

Answers (1)

user2357112
user2357112

Reputation: 280887

Matlab's max(a, b) is a broadcasted elementwise maximum operation. Python's max(a, b) isn't. Python's max doesn't understand arrays, and you shouldn't use it on arrays.

For a broadcasted elementwise maximum, you want numpy.maximum:

numpy.maximum(whatever, whatever)

Also, Matlab's realmin is the smallest positive normalized double-precision floating-point number, while Python's sys.maxint is a large negative int (and also nonexistent on Python 3). That's probably not what you want. The equivalent to Matlab's realmin would be

sys.float_info.min

or

numpy.finfo(float).tiny

(numpy.finfo(float).min is a different thing.)

Upvotes: 1

Related Questions