Русский: ```питон
импортировать numpy как np импортировать matplotlib.pyplot как plt импортировать scipy
импортировать временный файл импортировать os импортировать imageio
- генерировать случайные выборки из
def plot_bridge(samples=None, n=1000, dist=scipy.stats.norm, dist_name="normal", low=-3, high=+3):
рис, оси = plt.subplot_mosaic("ABB", figsize=(20, 6)) ax1 = оси["A"] ax2 = оси["B"]
если выборок нет: выборки = расст.rvs(размер=n) еще: n = len(выборки) x = отсортировано(выборки) y = расст.cdf(x) ref_x = np.linspace(низкий, высокий, 1000) ref_y = dist.cdf(ref_x)
# вычислить эмпирический cdf ecdf = np.arange(n) / len(выборки) # график cdf стандартного нормального распределения и эмпирического cdf выборок ax1.plot(ref_x, ref_y, label='Стандартный CDF') ax1.plot(x, ecdf, label='Эмпирическая функция распределения распределения') ax1.set_title( ) ax1.set_xlim(низкий,высокий) ax1.легенда() ax1.set_ylim(0,1) ax2.plot([0.0] + dist.cdf(x) .tolist() + [1.0], [0.0] + (np.sqrt(n) * (ecdf - dist.cdf(x))).tolist() + [0.0]) ax2.set_title('центрировано, масштабировано и пересинхронизировано') ax2.set_ylim(-0.9, 0.9) fig.suptitle(f"{dist_name}, с n = {n}") вернуть инжир
def interpolate_counts(counts, frames_per_step):
interpolated_counts = [counts[0]] для i в диапазоне (1,len(counts)): интервал = (counts[i] - counts[i-1]) // i interpolated_counts += список(диапазон(counts[i-1], counts[i], интервал)) вернуть interpolated_counts + [counts[-1]]
с tempfile.TemporaryDirectory() в качестве temp_dir:
dist = scipy.stats.norm dist_name = "нормальный" низкий, высокий = -3,5, +3,5
n_шагов = 16 кадров_на_шаг = 10 sample_counts = interpolate_counts([2**n для n в диапазоне(n_steps)], frames_per_step) n_frames = len(количество_выборок)-1 выборки = dist.rvs(size=sample_counts[0]).tolist() для i в диапазоне (n_frames): выборки += dist.rvs(size=sample_counts[i+1]-sample_counts[i]).tolist() fig = plot_bridge(образцы, dist=расстояние, dist_name=dist_name, low=низкий, high=высокий) имя_файла = os.path.join(temp_dir, f"plot_{i:03d}.png") fig.savefig(имя файла) plt.close(рис.)
# Компилировать изображения в GIF кадр/с = 12 изображения = [] для i в диапазоне (n_frames): имя_файла = os.path.join(temp_dir, f"plot_{i:03d}.png") images.append(imageio.imread(имя_файла)) imageio.mimsave(f"{dist_name} Теорема Донскера.gif", изображения, продолжительность=1/кадр/с)
```