Края бинов с 1 элементом в многомерной гистограмме - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь уменьшить D-мерный массив точек (D> 1). Шаги следующие:

  1. Генерирование D-мерной гистограммы
  2. Обрезка с максимальным значением 1
  3. Извлечение позиции тех бинов, где N = 1

Идея состоит в том, чтобы go из распределения точек, показанного слева, показывать справа (в 2D для визуализации здесь):

enter image description here

Первые два пункта просты, но я изо всех сил пытаюсь найти быстрый (это важно) способ решения третьей точки. То есть: из обрезанной гистограммы, как мне извлечь (как можно быстрее) координаты ребер, связанные с этими D-мерными (обрезанными) ячейками с 1 элементом внутри?


import numpy as np

N, D = 500, 3

# Random D-dimensional distribution of N points
arr = np.random.uniform(0., 10., (N, D))

# Some random number of bins
bins = np.random.randint(20, 40, D)
# D-dimensional histogram
hst, edges = np.histogramdd(arr, bins=bins)
# Clip at max=1
hst = np.clip(hst, a_min=None, a_max=1)

# This block below needs to be as fast as possible
# Find bins where there is 1 element
idxs = np.array(np.where(hst > 0)).T
# Extract coordinates
hst_dwnsmp = []
for pt in idxs:
    coord = []
    for i, j in enumerate(pt):
        coord.append(edges[i][j])
    hst_dwnsmp.append(coord)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...