Общий способ квантовать числа с плавающей запятой в произвольное количество бинов? - PullRequest
0 голосов
/ 09 мая 2018

Я хочу квантовать серию чисел, которые имеют максимальное и минимальное значения X и Y соответственно, в произвольное количество бинов. Например, если максимальное значение моего массива 65535, а минимальное 0 (не предполагайте, что это все целые числа), и я хочу квантовать значения в 2 бинов, все значения больше floor(65535/2) станет 65535, а остальные станут 0. Подобная история повторяется, если я хочу квантовать массив от любого числа от 1 до 65535. Интересно, есть эффективный и простой способ сделать это? Если нет, то как я могу сделать это эффективно, если количество бинов равно 2? Хотя псевдокод будет в порядке, но Python + Numpy предпочтительнее.

1 Ответ

0 голосов
/ 09 мая 2018

Это не самое элегантное решение, но:

MIN_VALUE = 0
MAX_VALUE = 65535
NO_BINS = 2   

# Create random dataset from [0,65535] interval
numbers = np.random.randint(0,65535+1,100)

# Create bin edges
bins = np.arange(0,65535, (MAX_VALUE-MIN_VALUE)/NO_BINS)

# Get bin values
_, bin_val = np.histogram(numbers, NO_BINS-1, range=(MIN_VALUE, MAX_VALUE))

# Change the values to the bin value
for iter_bin in range(1,NO_BINS+1):
    numbers[np.where(digits == iter_bin)] = bin_val[iter_bin-1]

UPDATE

Выполняет ту же работу:

import pandas as pd
import numpy as np

# or bin_labels = [i*((MAX_VALUE - MIN_VALUE) / (NO_BINS-1)) for i in range(NO_BINS)]
_, bin_labels = np.histogram(numbers, NO_BINS-1, range=(MIN_VALUE, MAX_VALUE))

pd.cut(numbers, NO_BINS, right=False, labels=bin_labels)
...