сюжет перетасованного массива - PullRequest
0 голосов
/ 23 июня 2018

Я пишу очень простой скрипт, который изображает грех, используя jupyter notebook (python 3). когда я положил:

import numpy
import matplotlib.pyplot as plt
x=np.arange(0.0,5*np.pi,0.001)
y = np.sin(x)
plt.plot(x,y)

Сюжет в порядке.

Однако, если:

import numpy
import matplotlib.pyplot as plt
x=np.arange(0.0,5*np.pi,0.001)
np.random.shuffle(x)
y = np.sin(x)
plt.plot(x,y)

изображение enter image description here

Я не понимаю, зачем тасовать х, прежде чем я совершу грех.
спасибо

1 Ответ

0 голосов
/ 23 июня 2018

Давайте сначала немного упростим вещи. Мы наносим на карту 4 точки и отмечаем их в порядке их построения.

import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt

x=np.arange(4)
y = np.sin(x)

plt.plot(x,y, marker="o")

for i, (xi,yi) in enumerate(zip(x,y)):
    plt.annotate(str(i), xy=(xi,yi), xytext=(0,4), 
                 textcoords="offset points", ha="center")

plt.show()

enter image description here

Нет, если мы перемешаем x и построим тот же график,

x=np.arange(4)
np.random.shuffle(x)
y = np.sin(x)

enter image description here

мы видим, что положения точек остаются прежними, но, например, раньше первой точкой была точка в (0,0), а теперь появляется третья. Благодаря этому рандомизированному порядку соединительные линии идут вразрез.

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

...