【问题标题】:Taking percentile cuts along an axis of ascii data via python通过python沿ascii数据轴进行百分位数切割
【发布时间】:2015-04-24 19:36:30
【问题描述】:

我想沿轴(第 1 列)对 bin 中的数据值(例如第 2 列)进行不同的百分比切割(例如第 25、第 75 等),其格式如下:

25.4 14.29 15.25 14.58 10.02

34.4 14.34 15.32 14.62 10.03

90.4 14.44 14.82 14.59 8.58

90.6 14.00 14.83 14.60 8.56

54.4 14.00 14.83 14.60 8.56

...

这样的行数以千计,并且它们在第一列中分布不均匀(例如,如果我将它们分成 0-10、10-20 等,每个 bin 中有不同数量的行)。我在挠头,因为我认为我可以使用 numpy.percentile,并将数据读入一个 2D 数组,这些数组排列成根据第一列分箱的子数组,并使用 axis 参数指定沿正确的轴进行百分比切割.但是,numpy.percentile 似乎需要一个矩形数组(即恰好 [M,N] 值),并且在这种情况下不灵活。

所以,我正在寻找一种沿轴执行此类操作的方法。只是给你一个我如何沿轴取平均值的例子,这是我使用的常用代码,依赖于 numpy.histogram:

nval = numpy.histogram(val1,10,range=[0,100])[0]
val2sum= numpy.histogram(val1,10,range=[0,100],weights=val2)[0]
val2mean = val2sum/nval

其中 val1 是第一列。所以,我的 Python 知识水平对于做除平均值以外的任何事情都是相当有限的,所以学习沿轴进行百分位数切割和中位数将非常有帮助。有什么建议?谢谢。

【问题讨论】:

    标签: python arrays numpy median percentile


    【解决方案1】:

    以下代码应该可以实现您所寻找的。

    # First load the data from your file
    
    import numpy as np
    
    data = np.genfromtxt('28674467.txt', delimiter=' ')
    
    x = data[:,0] # Get first column
    m = data[:,1] # Get 2nd column
    
    nval, _ = np.histogram(x,10,range=[0,100])
    
    val2sum, _ = np.histogram(x,10,range=[0,100],weights=m)
    
    val2mean = val2sum/nval
    

    但是,如果您使用示例数据运行此操作,您将收到 RuntimeWarning: invalid value encountered in divide 警告,因为除法中的零。 val2mean 中的结果是:

    [   nan    nan  14.29  14.34    nan  14.      nan    nan    nan  14.22]
    

    如果按零过滤,则可以避免警告:

    val2mean = val2sum[nval != 0]/nval[nval != 0]
    print(val2mean)
    

    这将为您提供以下输出:

    [ 14.29  14.34  14.    14.22]
    

    注意:要获得匹配的边缘,您需要 np.histogram 函数中的第二个参数,您可以使用相同的方式进行过滤。

    val2sum, edges = np.histogram(x,10,range=[0,100],weights=m)
    
    print(edges[nval != 0])
    print(val2mean)
    
    [ 20.  30.  50.  90.]    
    [ 14.29  14.34  14.    14.22]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-06
      • 2016-11-27
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 2018-11-11
      • 2020-05-28
      相关资源
      最近更新 更多