有没有办法计算bin中的值数而不计算重复数? stats.binned_statistic似乎对我最有帮助,但唯一的问题是我似乎无法定义一个向我返回正确值的计数的函数。这就是我到目前为止所做的:
bin_count, bin_edges, bin_number = stats.binned_statistic(time, values, statistic=lambda y: len(set(y)), bins=range(0, finaltime, 5))
,出现的错误是“TypeError:只有一个元素的整数数组可以转换为索引”
所以如果我有时间= [1,1,1,2,4,7,8,10]和值= [7,3,9,3,5,7,11,45],我想bin_count为[4,3]而不是[5,3],这是此函数中预定义的'count'给我的。
如果有人可以帮我解决这个问题,或者可能采用其他方法来解决这个问题,那就太棒了!
答案 0 :(得分:0)
在将时间数组传递给binned_statistic之前,您可以将其唯一。
bc,be,bn = binned_statistic(list(set(time)),None,statistic='count',bins=2)
将callables传递给binned_statistic似乎永远不会起作用(尝试传递statistic = sum和statistic =“sum”。它们应该是等价的,但它们不是。奇怪的。)。
尝试对你的价值进行分类并对自己进行去复制:
dv = numpy.digitize(time,numpy.arange(0,10,5))
udict = {}
udict.update([((dv[i],v),t) for i,(t,v) in enumerate(zip(time,values))])
nv,nt = zip(*[(k[1],udict[k]) for k in udict.keys()])
bc,be,bn = binned_statistic(nt,nv,statistic='count',bins=2)
基本上,将您的值传递给numpy.digitize,它将为每个bin分配一个bin。 enumerate(zip(time,values))
生成一个编号的时间 - 值对列表,我稍微重新排列以构建由bin值组合键入的字典,其中值是相应的时间。然后检索字典的每个成员将产生一个新的值和时间数组,其中时间 - 值对于特定bin中的值是唯一的。然后根据规范运行binned_statistic。
((这非常难以阅读等等。我欢迎优秀的解决方案。当你想保留一些可能不同的其他数据时,制作独特是很棘手的。)