Easyviz и scitools.std все еще работают на python3? Есть альтернатива созданию фильмов из последовательности изображений? - PullRequest
0 голосов
/ 01 февраля 2020

Я изучаю книгу Ганса Петтера Лангтангена «Учебник по науке» c Программирование с Python 2nd. Книга использует python2, но я применяю ее в python3. Библиотека scotools.std широко используется в книге, но я не могу импортировать или установить ее в python3. Есть ли альтернатива scitools.std, которая работает для python3? (Это может решить мою трудность в следовании книге.)

Конкретно в этом вопросе я ищу альтернативу Easyviz, потому что я не могу сделать mov ie с графиком функции Гаусса изменив параметры s, как требуется в вопросе.

Код python2, представленный в книге:

from scitools.std import *
import time

def f(x, m, s):
    return (1.0/(sqrt(2*pi)*s))*exp(-0.5*((x-m)/s)**2)

m = 0
s_start = 2
s_stop = 0.2
s_values = linspace(s_start,s_stop, 30)
x = linspace(m - 3*s_start, m + 3*s_start, 1000)
# f is max for x=m; smaller s gives larger max value
max_f = f(m, m s_stop)

# Show the movie on the screen
# and make hardcopies of frames simultaneously.

counter = 0
for s in s_values:
    y = f(x, m, s)
    plot(x, y, axis=[x[0], x[-1], -0.1, max_f],
         xlabel='x', ylabel='f', legend='s=%4.2f' % s,
         savefig='tmp%04d.png' % counter)
    counter += 1
    #time.sleep(0.2)

# Make movie file the simplest possible way:
movie('tmp*.png')

Моя неполная версия в python3:

import time
import numpy as np
import matplotlib.pyplot as plt

def f(x, m, s):
    return (1.0/(np.sqrt(2*np.pi)*s))*np.exp(-0.5*((x-m)/s)**2)

m = 0
s_start = 2
s_stop = 0.2
s_values = np.linspace(s_start, s_stop, 30)
x = np.linspace(m - 3*s_start, m + 3*s_start, 1000)
# f is max for x=m; smaller s gives larger max value
max_f = f(m, m, s_stop)

# Show the movie on the screen
# and make hardcopies of frames simultaneosly.

counter = 0
for s in s_values:
    y = f(x, m, s)
    plt.plot(x, y)
    plt.xlim(x[0], x[-1])
    plt.ylim(-0.1, max_f + 0.1)
    plt.xlabel('x')
    plt.ylabel('f')
    plt.legend('s=%4.2f' % s)
    plt.savefig('tmp%04d.png' % counter)
    counter += 1
    #time.sleep(0.2)
    plt.show()

Это правильно создает 30 изображений, но не впереди go и производит mov ie. * Обратите внимание, что я использовал plt.show () и мне нужно закрыть 30 windows, если я не использую каждый сгенерированный файл, он показывает накопленные кривые на одном графике.

Так что я вижу три способа чтобы решить мою проблему:

1) Возможность правильно установить и импортировать scitools.std (это было бы отлично, потому что проблема проходит через всю книгу!);

2) Получение альтернатива модулям scitools.std и Easyviz;

3) Следуя пути, принятому мной в моей неполной версии кода, то есть замене команды mov ie ('tmp * .png'), представленной книгой с чем-то, что хорошо работает в моем коде.

1 Ответ

0 голосов
/ 27 апреля 2020

Да, есть модуль scitools3.

Вы можете установить: pip install scitools3

и перезагрузить P C.

Подробнее на https://pypi.org/project/scitools3/

/ маса

...