4D Matrix operation in Python – conversion from MATLAB


I’m trying to translate this MATLAB code to Python:

MATLAB: V_c = delta* max(V_L, repmat(V_A_c,[N_p 1]) - NM )

where these are 4D arrays:

V_c is the continuation value for in different states, (should have shape 81, 75, 15, 31)
V_L is the initial value, (has shapes 81, 75, 15, 31)
V_A_c is the value of adjustment under optimal choice (has shape 1, 75, 15, 31)

NM is a number (NM = κ*np.exp(P0))
N_p is the length of the grid

This is my attempted python code

PYTHON: V_c = delta * np.amax(V_L,(np.tile(V_A_c,(([N_p,1]))))-NM)

I get errors, that the lengths of the arrays are different, and that only integer scalar arrays can be converted to a scalar index.

In Python, my V_L and V_A_c has the same values and shapes as the MATLAB gives, but I still can’t compute V_c. Any suggestions?

Asked By: Nina



You can’t. You must write it. Even you use converter, you will not reach the exact code. So, try to understand the code and write in python.

Answered By: Muhammed YILMAZ

The error you mention, comes from the fact that you want to element-wise compare two tensor (matrix). use np.maximum.

considering the tile operation is correct and N_p is 85 in you example:

V_c = delta * np.maximum(V_L, np.tile(V_A_c,(N_p,1,1,1)) - NM ) 
Answered By: amirhm