通过python沿ascii数据轴进行百分位切割

2024-09-29 19:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我不仅要取中间值,还要取数据值(如第2列)沿轴(第1列)的不同百分比削减(例如第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等,则每个行中的行数不同)。我在挠头,因为我想我可以用百分位,并将数据读入按列1排列成子数组的2D数组,并使用axis参数指定沿适当的轴进行百分位切割。然而,百分位似乎需要一个矩形数组(即精确的[M,N]值),在这种情况下是不灵活的。在

所以,我在寻找一种沿轴执行这种操作的方法。为了给你一个例子,我如何沿着一个轴取平均值,这里是我常用的代码,依赖于数字直方图公司名称:

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知识水平对于做除平均值以外的任何事情都是相当有限的,所以学习沿一个轴计算百分位切割和中间值将非常有帮助。有什么建议吗?谢谢。在


Tags: 数据numpy参数格式range数组平均值histogram
1条回答
网友
1楼 · 发布于 2024-09-29 19:22:56

下面的代码应该可以实现您想要的。在

# 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中的结果是:

^{pr2}$

如果按0筛选,则可以避免警告:

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]

相关问题 更多 >

    热门问题