'Output doesn't come. Plotting issue [Matlab to python conversion]
This is my Pyhton code.
import numpy as np
import matplotlib.pyplot as plt
n = 3; #% No of image
T = 100; #% for the time period user wants to see the mirage
ts = .2*(100/(2*n-3)); #% standing time
tv = .6*((100-((2*n-3)*ts))/(2*(n-1))); #% travelling time
m1 = np.arange(0,tv,0.1);
x1 = 0.5*(1-(np.cos(np.pi*(m1/tv))));
xa = x1;
x2 = []
#travelling toward from left to right
for i in np.arange(1,n-1):
x1 = x1+i -1
#standing at one point
for f in np.arange(1,ts):
x2.append(x1[-1])
if i==1:
x3 = [x1, x2]
else:
x3 = [x3,x1,x2]
#%travelling from right to left
xd = np.flip(xa)
for i in range(0, n - 1):
if i == 0:
pass
else:
xd = xd - 1
xw = []
for f in np.arange(1, ts):
mini = np.amin(xd)
xw.append(mini)
if i == 0:
xm = np.concatenate((xd.reshape(1, -1), np.array(xw).reshape(1, -1)), axis=1)
else:
xm = np.concatenate((xm, xd.reshape(1, -1), np.array(xw).reshape(1, -1)), axis=1)
xm = abs(np.amin(xm)) + xm
#%cloning the cycle
xs = []
for r in np.arange(1, np.fix(T/(2*(n-1)*(tv+ts)))):
if r==1:
xs.append[x3,xm]
else:
xs.append[xs,x3,xm]
plt.plot(xs)
But when I run it this nothing comes out
And this is my matlab code
clc;
close all;
clear all;
% all of the given time are in milisecond
n = 3;% No of image
T = 100;% for the time period user wants to see the mirage
ts = .2*(100/(2*n-3)); % standing time
tv = .6*((100-((2*n-3)*ts))/(2*(n-1)));% travelling time
m1 = 0:.1:tv;
x1 = .5*(1-cos(pi*(m1/tv)));%position equation
xa = x1;
%travelling toward from left to right
for i= 1:n-1
x1 = x1+i-1;
%standing at one point
for f = 1:ts
x2(f) = x1(end);
end
if i==1
x3=[x1,x2];
else
x3 = [x3,x1,x2];
end
end
disp(x2)
%travelling from right to left
xd = flip(xa);
for i= 1:n-1
if i==1
else
xd = xd-1;
end
%standing at one point
for f = 1:ts
xw(f) = min(xd);
end
if i==1
xm=[xd,xw];
else
xm = [xm,xd,xw];
end
end
xm = abs(min(xm))+xm;
#%cloning the cycle
xs = []
for r in np.arange(1, np.fix(T/(2*(n-1)*(tv+ts)))):
if r==1:
xs.append(x3,xm)
else:
xs.append(xs,x3,xm)
plt.plot(xs)
And this is output that comes with matlab code. I want the output of my python code to same as Matlab code or at least I want to see a plot. But it doesn't show anything. So how can I solve this issue? Thank you in advance.
Solution 1:[1]
Here is a fixed version of your code. The basic idea is not to mix concatenate
with append
. In MATLAB, [[a],[b]]
is a horizontal concatenation and is different from list.append()
in Python. Also take care of the inclusive range in MATLAB vs. exclusive range in Python, and fix
returns a float
whereas int
returns an integer
.
import numpy as np
import matplotlib.pyplot as plt
# all of the given time are in milisecond
n = 3 # No of image
T = 100 # for the time period user wants to see the mirage
ts = 0.2*(100/(2*n-3)) # standing time
tv = 0.6*((100-((2*n-3)*ts))/(2*(n-1))) # travelling time
m1 = np.arange(0,tv+.1,0.1)
x1 = 0.5*(1-np.cos(np.pi*(m1/tv))) # position equation
xa = x1
# travelling toward from left to right
x2 = np.zeros(int(ts))
for i in range(1,n):
x1 = x1+i-1
# standing at one point
for f in np.arange(0,int(ts)):
x2[f] = x1[-1]
if i == 1:
x3 = np.concatenate((x1,x2))
else:
x3 = np.concatenate((x3,x1,x2))
# # travelling from right to left
xd = xa[::-1] # flip xa
xw = np.zeros(int(ts))
for i in range(1,n):
if i != 1:
xd -= 1
# standing at one point
for f in np.arange(0,int(ts)):
xw[f] = np.min(xd)
if i == 1:
xm = np.concatenate((xd,xw))
else:
xm = np.concatenate((xm,xd,xw))
xm += np.abs(np.min(xm))
# cloning the cycle
for r in range(0,int(T/(2*(n-1)*(tv+ts)))):
if r == 0:
xs = np.concatenate( (x3,xm) )
else:
xs = np.concatenate( (xs,x3,xm) )
plt.plot(xs)
which shows the same plot as MATLAB.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | AboAmmar |