Выход не приходит. Проблема с графикой [преобразование Matlab в python]

Это мой код Python.

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)

Но когда я запускаю его, ничего не выходит

Выход не приходит. Проблема с графикой [преобразование Matlab в python]

И это мой код Matlab

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)

Выход не приходит. Проблема с графикой [преобразование Matlab в python]

И это вывод, который поставляется с кодом Matlab. Я хочу, чтобы вывод моего кода Python был таким же, как код Matlab, или, по крайней мере, я хочу увидеть график. Но это ничего не показывает. Итак, как я могу решить эту проблему? Заранее спасибо.

Прочтите описания как матлаб, так и октава. Они нет одинаковы, поэтому используйте только оба тега, когда спрашиваете о сходствах/различиях между ними.

Adriaan 13.05.2022 10:51

Похоже, ваш xs пуст, проверьте его размер. Затем проверьте, каковы размеры x3, xm, xs и вашего итератора цикла.

Adriaan 13.05.2022 10:54

`xs.append[x3,xm]` ?? Append — это метод, он нужен (), а не []

Ander Biguri 13.05.2022 10:56

@AnderBiguri Я исправил это, но все равно дает тот же пустой сюжет.

SANman 13.05.2022 11:29

@Adriaan xs намеренно пуст. Чтобы список можно было заполнить хм, х3. И вы правы, октава отличается, почему я ее пометил.

SANman 13.05.2022 11:38

Конечно, вы инициализируете xs пустым, но он не должен быть пустым после списка. Вот почему я предложил вам проверить их размеры.

Adriaan 13.05.2022 11:39

Я не вижу, чтобы это было исправлено в коде здесь.

Ander Biguri 13.05.2022 11:53
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот исправленная версия вашего кода. Основная идея — не смешивать concatenate с append. В MATLAB [[a],[b]] представляет собой горизонтальную конкатенацию и отличается от list.append() в Python. Также позаботьтесь об инклюзивном диапазоне в MATLAB и эксклюзивном диапазоне в Python, и fix возвращает float, тогда как int возвращает 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)

который показывает тот же график, что и MATLAB.

омг, я не знаю, как вас отблагодарить. Я напрягался из-за этого неделями. У меня практически не было опыта работы с Python, поэтому я решил написать код в Matlab, а затем преобразовать его в Python. Спасибо, что нашли время написать его. Желаю тебе всего наилучшего. Еще раз спасибо.

SANman 14.05.2022 00:04

Да, я уже проголосовал за ваш ответ.

SANman 14.05.2022 00:28

Другие вопросы по теме