Я относительно новичок в программировании, и я пробовал использовать библиотеку анимации matplotlib для, совершенно очевидно, анимации. Однако анимация, которую я создаю, очень медленная и прерывистая. Следующий код является примером этого, однако он требует относительно большого количества вычислений. random_set - это просто случайно сгенерированный набор, temp_set служит копией random_set, потому что я сортирую random_set позже, а new_set просто сохраняет значения изменения y и x, на которые анимация будет изменять каждую точку. Я пробовал использовать преобразование в ax.texts, которое могло бы сделать его быстрее, но я узнал, что преобразование не означает его в традиционном математическом смысле; поэтому я просто прибегал к постоянному удалению и переносу этих точек. Есть ли способ ускорить анимацию? Я считаю, что для демонстрации масштабов проблемы необходим весь фрагмент кода.
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import random
import math
fig , ax = plt.subplots()
random_set = []
while len(random_set) != 99:
choice = random.randint(-100,100)
if choice in random_set:
pass
else:
random_set.append(choice)
print(random_set)
lengths = [(i,int(len(random_set) / i)) for i in range(1,int(len(random_set) ** (1/2) + 1)) if len(random_set) % i == 0][-1]
print(lengths)
counter = 0
temp_set = []
for i in random_set:
plt.text(*(counter % lengths[1],math.floor(counter / lengths[1])),i)
temp_set.append((i,counter % lengths[1],math.floor(counter / lengths[1])))
counter += 1
random_set.sort()
x_lims = (0,lengths[1])
y_lims = (0,lengths[0])
ax.set_xlim(*x_lims)
ax.set_ylim(*y_lims)
plt.axis("off")
new_set = []
for j in temp_set:
new_x = random_set.index(j[0]) / lengths[0]
random_set[random_set.index(j[0])] = None
new_y = (lengths[0] - 1) / 2
dy = (new_y - j[2]) / 250
dx = (new_x - j[1]) / 250
new_set.append((j[0],dx,dy))
def percentile(i):
ax.texts.clear()
for j in range(0,len(new_set)):
plt.text(temp_set[j][1] + (i * new_set[j][1]),temp_set[j][2] + (i * new_set[j][2]),new_set[j][0])
animate = animation.FuncAnimation(fig, func = percentile, frames = [i for i in range(1,251)], interval = 1,repeat = False)
plt.show()