Функция histogramdd
Функция histogramdd вычисляет многомерную гистограмму
для массива точек в пространстве заданной размерности.
Первым параметром функция принимает массив точек размерности
(N, D), где N - количество точек, а D -
количество измерений. Вторым параметром можно задать
количество бинов по каждому измерению, а третьим -
границы бинов.
Синтаксис
np.histogramdd(sample, bins=10, range=None, density=False, weights=None)
Пример
Рассмотрим базовый пример построения двумерной гистограммы для случайных точек:
import numpy as np
rng = np.random.default_rng(0)
sample = rng.random((100, 2))
hist, edges = np.histogramdd(sample, bins=3)
print(hist)
print(edges[0])
print(edges[1])
Результат выполнения кода:
[[[ 8. 9. 10.]
[ 9. 4. 6.]
[ 2. 2. 3.]]
[[ 6. 7. 3.]
[ 2. 4. 7.]
[ 3. 3. 1.]]
[[ 5. 2. 3.]
[ 0. 3. 2.]
[ 1. 1. 3.]]]
[0. 0.33333333 0.66666667 1. ]
[0. 0.33333333 0.66666667 1. ]
Пример
Построим гистограмму с разным количеством бинов по каждому измерению:
import numpy as np
rng = np.random.default_rng(1)
sample = rng.normal(size=(100, 2))
hist, edges = np.histogramdd(sample, bins=(5, 10))
print(hist.shape)
print(hist.sum())
Результат выполнения кода:
(5, 10)
100.0
Пример
Рассмотрим использование параметра range
для ограничения области построения гистограммы:
import numpy as np
rng = np.random.default_rng(2)
sample = rng.random((200, 3))
hist, edges = np.histogramdd(
sample,
bins=(4, 5, 3),
range=[(0.2, 0.8), (0.1, 0.9), (0.3, 0.7)]
)
print(hist.shape)
print(hist[:, :, 0])
Результат выполнения кода:
(4, 5, 3)
[[[ 2. 3. 2. 4.]
[ 5. 4. 3. 3.]
[ 2. 2. 3. 4.]
[ 4. 2. 6. 6.]
[ 4. 5. 3. 3.]]
[[ 3. 4. 4. 5.]
[ 4. 0. 3. 3.]
[ 5. 5. 3. 4.]
[ 1. 3. 4. 6.]
[ 3. 6. 3. 4.]]
[[ 2. 3. 0. 2.]
[ 1. 2. 3. 2.]
[ 3. 2. 4. 4.]
[ 4. 3. 4. 3.]
[ 5. 4. 4. 2.]]
[[ 3. 4. 3. 6.]
[ 3. 2. 1. 3.]
[ 2. 4. 6. 6.]
[ 2. 4. 4. 5.]
[ 4. 2. 2. 3.]]]
Пример
Применим веса к точкам для построения взвешенной гистограммы:
import numpy as np
rng = np.random.default_rng(3)
sample = rng.random((50, 2))
weights = rng.integers(1, 5, size=50)
hist, edges = np.histogramdd(sample, bins=3, weights=weights)
print(hist)
print(hist.sum())
print(weights.sum())
Результат выполнения кода:
[[[ 8. 19. 19.]
[ 4. 6. 6.]
[ 6. 12. 6.]]
[[ 9. 6. 12.]
[ 3. 7. 10.]
[ 8. 8. 8.]]
[[ 7. 9. 6.]
[ 8. 12. 9.]
[ 9. 4. 15.]]]
149.0
149
Пример
Используем параметр density для получения
нормированной гистограммы:
import numpy as np
rng = np.random.default_rng(4)
sample = rng.random((1000, 2))
hist, edges = np.histogramdd(sample, bins=(5, 5), density=True)
print(hist.sum() * np.prod(edges[0][1] - edges[0][0]))
Результат выполнения кода:
0.9999999999999998
Смотрите также
-
функцию
histogram,
которая вычисляет одномерную гистограмму -
функцию
histogram2d,
которая вычисляет двумерную гистограмму -
функцию
bincount,
которая подсчитывает частоту значений в одномерном массиве -
функцию
digitize,
которая определяет индексы бинов для одномерных данных