【问题标题】:Python convert Continuous data into categorialPython将连续数据转换为分类
【发布时间】:2016-09-04 23:38:54
【问题描述】:

我有一个连续的浮点数据,范围从-257.2到154.98, 我不知道它是如何分布的。但我希望它在垃圾箱中 - 比如说 -270 到 -201、-200 到 -141、-140 到 -71、-70 到 -1、0 到 69、70 到 139、140 到 209

有没有办法做到这一点?具体来说,我正在寻找:

data = np.random.rand(10)
data
array([ 0.58791019,  0.2385624 ,  0.70927668,  0.22916244,  0.87479326,
        0.49609703,  0.3758358 ,  0.35743165,  0.30816457,  0.2018548 ])
def GenRangedData(data, min, max, step):
    #some code
    no_of_bins = (max - min)/ step
    bins = []
    #some code
    return bins

rd = GenRangedData(data, 0, 1, 0.1)
# should generate: 
rd
[[], [0.2385624, 0.22916244, 0.2018548], [0.3758358, 0.35743165, 0.30816457], [0.49609703], [0.58791019], [], [0.70927668], [0.87479326]]

我显然可以通过手动迭代所有数字来做到这一点,但我希望将其自动化,以便可以对 min max 和 step 进行大量试验。有没有办法有效地做到这一点?

【问题讨论】:

  • 不确定你在问什么。所以你不想循环data并将每个项目分配给GenRangedDate()内的相应bin?如果不是这样,您希望实现什么目标?
  • 我正在寻找一个库函数来这样做,我自己迭代列表似乎没有效率..
  • 这是一个O(n) 操作,没有内置函数可以使这个更快,您只需检查所有值。
  • 如果您的数据已经排序,您可以使用二分搜索更快地完成排序。
  • np.histogram(a, bins=10, range=None, normed=False, weights=None, density=None) — 如果 bins 是一个数字序列,它们是您的数据(a 数组)被分类到的 bin 的边缘。

标签: python numpy normalization binning


【解决方案1】:

这是我能想到的,我不知道这是不是最好的方法, 如果您认为这可以更快地完成,请更新/编辑

def GenRangedData(data, min, max, step):
    cat_data = []
    bins = ((i_max - i_min) / step) + 2
    for x in range(0, len(data)):
        temp_data = []
        for y in range(0, len(data[x])):
            for n in range(0, int(bins)):
                if data[x][y] < (i_min + (n*step)):
                    temp_data.append(n)
                    break
    cat_data.append(temp_data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 2021-05-08
    • 2019-11-24
    相关资源
    最近更新 更多