Отображение последовательности изображений в Jupyter Notebook [дубликат]

Оператор == проверяет, указывают ли две ссылки на один и тот же объект или нет. .equals() проверьте фактическое содержимое строки (значение).

Обратите внимание, что метод .equals() принадлежит классу Object (суперкласс всех классов). Вам необходимо переопределить его в соответствии с вашим требованием к классу, но для String оно уже реализовано и проверяет, имеет ли две строки одно и то же значение.

  • Случай 1
    String s1 = "Stack Overflow";
    String s2 = "Stack Overflow";
    s1 == s2;      //true
    s1.equals(s2); //true
    
    Причина: строка литералы, созданные без нуля, хранятся в пуле строк в области перментонов кучи. Таким образом, оба s1 и s2 указывают на один и тот же объект в пуле.
  • Случай 2
    String s1 = new String("Stack Overflow");
    String s2 = new String("Stack Overflow");
    s1 == s2;      //false
    s1.equals(s2); //true
    
    Причина. Если вы создаете объект String с использованием ключевого слова new, ему выделяется отдельное пространство в куче.
3
задан Chipmuenk 6 November 2017 в 14:23
поделиться

2 ответа

Это не имеет никакого отношения к анимации.

Строки

%matplotlib inline
import matplotlib.pyplot as plt
fig, ax = plt.subplots()

создадут вывод с пустой фигурой.

Вы можете запретить вывод ячейки в jupyter notebook с помощью %%capture .

Cell1:

%%capture
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.animation
plt.rcParams["animation.html"] = "jshtml"
import numpy as np

t = np.linspace(0,2*np.pi)
x = np.sin(t)

fig, ax = plt.subplots()
h = ax.axis([0,2*np.pi,-1,1])
l, = ax.plot([],[])

def animate(i):
    l.set_data(t[:i], x[:i])

ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t))

Cell2:

ani

4
ответ дан ImportanceOfBeingErnest 15 August 2018 в 15:38
поделиться
  • 1
    Ухоженная! При серфинге для захвата %% я нашел другое решение: fig, ax = plt.subplots () plt.close (); также сделал трюк для меня. Ручки fig и ax, очевидно, не удаляются, закрывая график. Есть ли причины предпочесть одно или другое решение? – Chipmuenk 6 November 2017 в 15:17
  • 2
    Нет, причина, по которой обе решения работают, на самом деле одна и та же: график закрыт. Либо перейдем к следующей ячейке, либо закрываем ее уже внутри ячейки. Выберите тот метод, который вам больше нравится. – ImportanceOfBeingErnest 6 November 2017 в 15:24

Вот альтернативный пример:

%matplotlib inline
from matplotlib import animation, pyplot as plt
import numpy as np
plt.rc('animation', html='html5')

data = np.random.random(20)
fig = plt.figure()

ax = fig.add_subplot(111)   
ax.plot(data) # draw background

anim = animation.ArtistAnimation(fig, [[ax.scatter(x, y)] for x, y in enumerate(data)])
anim

Результат (anim) показан анимированным, но потенциальный побочный эффект является дополнительным отображением статического кадра. Этот побочный эффект исчезает, если вызов plt.figure встречается в отдельной ячейке перед методом add_subplot.

Это работает, потому что (например, ImportanceOfBeingErnest) создание нового рисунка вызывает побочный эффект отображения статическое изображение (изображающее, как фигура осталась при завершении текущей оценки ячейки в ноутбуке). Но если на фигуре еще ничего не было записано (даже не оси), вы предотвращаете отображение любого изображения (без необходимости использовать магию юпитера для его подавления).

1
ответ дан benjimin 15 August 2018 в 15:38
поделиться
  • 1
    Другая альтернатива - полностью опустить %matplotlib inline, или если это невозможно, то сразу после после будет создана фигура, предназначенная для анимации. Это сбрасывает магию отображения статических фигур, которые не являются частью результата ячейки; сама анимация отображается совершенно другим механизмом (с использованием html-форматирования результата оценки ячейки). – benjimin 4 January 2018 в 23:25
Другие вопросы по тегам:

Похожие вопросы: