【问题标题】:How to categorize numerical data in numpy array iteratively?如何迭代地对numpy数组中的数值数据进行分类?
【发布时间】:2020-12-09 17:12:09
【问题描述】:

我目前正在尝试用normal = np.round(np.random.normal(loc=0.0,scale=1000,size=(size)),1).astype(int)seed = np.random.seed(0) 随机数据生成一个numpy 数组,然后以等距的方式对它们进行分类,例如:

d=10
data = np.ndarray.flatten(np.asarray(normal,dtype=int))

interval = np.divide(np.max(data)-np.min(data),d)
intervals = np.arange(np.min(data),np.max(data),interval,dtype=int)

        for x in range(len(data)):
            for z in range(d-1):
                if data[x] >= intervals[z] and data[x] < intervals[z+1]:
                    data[x] = z
                elif data[x] > intervals[-1]:
                    data[x] = d-1

理想情况下,当我这样做时,我希望我的数据数组中的值被 0-9 的值替换,但是每当我运行它时,我最终都会得到 4-8 的值。任何人都知道我可能做错了什么或如何改进此方法?

Interval 是要使用的增量值,Intervals 是各个间隔的实际边界值。

【问题讨论】:

    标签: python arrays numpy for-loop


    【解决方案1】:

    当您检查正确的间隔时,您正在覆盖数据。引入一个你填充的不同数据数组,保持源数据不变:

    import numpy as np
    import matplotlib.pyplot as plt
    
    size = 1000
    seed = np.random.seed(0)
    normal = np.round(np.random.normal(loc=0.0, scale=1000, size=(size)), 1).astype(int)
    
    d=10
    data = np.ndarray.flatten(np.asarray(normal, dtype=int))
    
    interval = np.divide(np.max(data)-np.min(data), d)
    intervals = np.arange(np.min(data), np.max(data), interval, dtype=int)
    
    data_d = np.zeros_like(data) # added
    
    for x in range(len(data)):
        for z in range(d-1):
            if data[x] >= intervals[z] and data[x] < intervals[z+1]: # check original data
                data_d[x] = z # fill new array so not to overwrite
            elif data[x] > intervals[-1]:
                data_d[x] = d-1
                
    plt.hist(data_d)
    plt.show()
    

    产生(取所有值):

    【讨论】:

      猜你喜欢
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      相关资源
      最近更新 更多