微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以特定的最小频率过滤 numpy 数组中的元素

如何解决以特定的最小频率过滤 numpy 数组中的元素

我有一个包含 5000 个计数的数组,需要对其进行卡方检验。但是,该测试仅在每个值的预期频率 >5 时才有效。我使用 collections.Counter(x) 找到了数据集中每个值的频率,我可以看到有些值的频率为 1 或 2。 现在,我想从原始数据集 x 中删除频率

删除这些点后,我需要创建一个预期的泊松分布以用于卡方检验,但再次确保预期频率 > 5。我已经使用 stats.poisson.rvs 进行了一些分布,但有没有办法确保频率始终高于 5?还是最好创建分发版,然后完成我问题第一部分中的步骤?

解决方法

将数组过滤到特定频率(例如 >5)的一种方法是(a 是您的原始数组):

#this method assumes array a is consists of integers
a[np.in1d(a,np.where(np.bincount(a)>5)[0])]

另一种方式是:

#works for non-integer arrays
values,counts = np.unique(a,return_counts=True)
a[np.in1d(a,values[counts>5])]

我猜 bincount 解决方案更快。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。