В контексте многократных экспериментов в NumPy хранение результатов обычно делается в заранее выделенных массивах, чтобы эффективно собирать статистику без создания динамических структур.
Принципы:
- Предвыделение массива
– создаём массив нужного размера (experiments) для выбранной статистики:
import numpy as np
experiments = 1000
maxima = np.zeros(experiments) # сюда будем записывать максимум каждой матрицы- Заполнение массива при цикле
– каждый эксперимент → вычисление статистики → сохранение в массив:
for i in range(experiments):
X = np.random.normal(0, 1, size=(n, n))
W = (X + X.T) / np.sqrt(2*n)
maxima[i] = W.max()- Альтернатива с векторизацией
Если возможно, генерировать все матрицы сразу:
X_all = np.random.normal(0, 1, size=(experiments, n, n))
W_all = (X_all + X_all.transpose(0,2,1)) / np.sqrt(2*n)
maxima = W_all.max(axis=(1,2))– без явного Python-цикла
– быстрее для больших экспериментов
- Использование результатов
– построение гистограмм:plt.hist(maxima, bins=30, density=True)
– вычисление средних и дисперсий:maxima.mean(),maxima.std()
– сохранение на диск:np.save('maxima.npy', maxima)
Ключевые моменты:
- Предвыделение массива экономит память и ускоряет код
- Индексация по эксперименту позволяет легко агрегировать статистику
- Векторизация полностью устраняет необходимость цикла, если память позволяет
Коротко:
результаты многократных экспериментов в NumPy удобно хранить в заранее созданном массиве фиксированного размера, что упрощает последующий анализ и визуализацию.