将浮点数量化为任意数量的二进制数的一般方法?

时间:2018-05-09 06:33:01

标签: python math floating-point arbitrary-precision quantization

我想量化一系列数字,这些数字的最大值和最小值分别为XY到任意数量的二进制数。例如,如果我的数组的最大值为65535且最小值为0(不要假设这些都是整数),并且我想将值量化为2个bin,所有超过floor(65535/2)的值将变为65535,其余值将变为0。如果我想从165535之间的任意数字量化数组,类似的故事会重复。我想知道,有没有一种有效而简单的方法来做到这一点?如果没有,我怎样才能有效地为2的权力数量的箱子做到这一点?虽然伪代码很好但是Python + Numpy是首选。

1 个答案:

答案 0 :(得分:1)

这不是最优雅的解决方案,但是:

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]

<强>更新

做同样的工作:

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)