Я изучаю книгу Ганса Петтера Лангтангена «Учебник по науке» 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'), представленной книгой с чем-то, что хорошо работает в моем коде.