How could I Transform some lines from Matlab to Python ::

1 view (last 30 days)
Mark Sc on 10 Oct 2021
Commented: Mark Sc on 11 Oct 2021
I am trying to transform the following lines into python, I already did however, I got an error not sure if I did it correct or not as I am new to python not sure about some lines: I attached both codes : In matlab (works fine):
clear all;
for ii = 1:nu_y
if (ii == 1)
t1 = 0;
t2 = p(ii);
Z(1:4) = linspace(t1,t2,4)
else
t1 = Z(3*ii-2);
t2 = t1+p(ii);
Z(3*ii-2:3*ii+1) = linspace(t1,t2,4)
end
end
In python:
import numpy as np
nu_x = 1
nu_y = 2
p = np.array([0.2,0.2])
for ii in range (nu_y):
if (ii == 1):
t1 = 0
t2 = p[ii]
Z[1,3] = np.linspace(t1,t2,3)
else:
t1 = Z[2*ii-1]
t2 = t1+p[ii]
Z[2*ii-1,2*ii+1] = linspace(t1,t2,3)

Walter Roberson on 10 Oct 2021
for ii = 1:nu_y
if (ii == 1)
That is intended to test for the first ii
for ii in range (nu_y):
if (ii == 1):
In Python, the first ii value is 0
Z(1:4) = linspace(t1,t2,4)
In MATLAB, that would be the first four entries in Z
Z[1,3] = np.linspace(t1,t2,3)
You have asked python to create a list with three elements (not 4 like you did in MATLAB), and you have asked Python to assign it to single location in a 2D array. If you were wanting to assign to the first three elements in Z then you should assigning to Z[0:2] .
It is not clear to me why you changed from 4 elements in MATLAB into 3 elements in Python.
Mark Sc on 11 Oct 2021
@Walter Roberson I attached the modified version of the code,
if you are run the same in Matlab give you different answer
import numpy as np
nu_x = 1
nu_y = 4
p = np.array([0.2,0.2,0.1,0.4])
Z=[]
for ii in range(nu_y):
if (ii == 0):
t1 = 0
t2 = p[ii]
Z[0:3] = np.linspace(t1,t2,4)
else:
t1 = Z[2*ii-2]
t2 = t1+p[ii]
Z[3*ii-3:3*ii] = np.linspace(t1,t2,4)
print(Z)
In matlab:
clear all;
nu_y=4;
p=[0.2,0.2,0.1,0.4]
for ii = 1:nu_y
if (ii == 1)
t1 = 0;
t2 = p(ii);
Z(1:4) = linspace(t1,t2,4)
else
t1 = Z(3*ii-2);
t2 = t1+p(ii);
Z(3*ii-2:3*ii+1) = linspace(t1,t2,4)
end
end
Z