documentation for scipy的binned_statistic_2d
函数给出了一个二维直方图的示例:
from scipy import stats
x = [0.1, 0.1, 0.1, 0.6]
y = [2.1, 2.6, 2.1, 2.1]
binx = [0.0, 0.5, 1.0]
biny = [2.0, 2.5, 3.0]
ret = stats.binned_statistic_2d(x, y, None, 'count', bins=[binx, biny])
有道理,但我现在要实现一个自定义函数。自定义函数的描述如下:
function:一个用户定义的函数,它接受一个一维数组的值,并输出一个单一的数字统计量。此函数将在每个bin中的值上调用。空bin将由函数([])表示,如果返回错误,则为NaN。
我不确定具体如何实现它,所以我想通过编写一个自定义函数来检查我的理解,该函数可以重新生成count
选项。
def custom_func(values):
return len(values)
x = [0.1, 0.1, 0.1, 0.6]
y = [2.1, 2.6, 2.1, 2.1]
binx = [0.0, 0.5, 1.0]
biny = [2.0, 2.5, 3.0]
ret = stats.binned_statistic_2d(x, y, None, custom_func, bins=[binx, biny])
但这会产生如下错误:
556 # Make sure `values` match `sample`
557 if(statistic != 'count' and Vlen != Dlen):
558 raise AttributeError('The number of `values` elements must match the '
559 'length of each `sample` dimension.')
561 try:
562 M = len(bins)
AttributeError: The number of `values` elements must match the length of each `sample` dimension.
该自定义函数应该如何定义?
1条答案
按热度按时间sigwle7e1#
出现此错误的原因是在使用自定义统计函数时(或任何非
count
统计信息),则必须将某个数组或数组列表传递给values
参数(元素的数量与x
中的数量相匹配)。您不能像示例中那样将其保留为None
,即使它是不相关的并且在计算每个仓中的数据点的计数时不被使用。因此,要匹配结果,只需将相同的
x
对象传递给values
参数:结果与
count
统计信息的结果相匹配: