我正忙着做一些基因组分析,有点卡住了。我有一些非常稀疏的数据,需要找到移动平均值超过某个阈值的地方,将每个点标记为1或0。数据的类型是唯一的,因此我无法使用可用的程序进行分析。在
每个点代表人类基因组上的一个点(碱基对)。对于每个数据集,有200000个潜在点。数据本质上是一个约12000个索引/值对的列表,其中所有其他点都假定为零。我需要做的是在整个数据集中取一个移动平均值,并返回平均值高于阈值的区域。在
我目前正在从数据集中按顺序读取每个点,并围绕找到的每个点构建一个数组,但对于大窗口大小,这是非常缓慢的。有没有一种更有效的方法来做到这一点,也许是用scipy或熊猫?在
编辑:杰米下面的魔术代码很好用(但我还不能投赞成票)!我非常感激。在
你可以用numpy来矢量化整件事。我构建了一个随机数据集,包含0到1999999之间的12000个索引,以及一个同样长的0到1之间的随机浮动列表:
然后,我在每个
^{pr2}$indices
周围构造一个总窗口大小2*win+1
的索引数组,以及一个相应的数组,其中包含该点对移动平均值的贡献:剩下的就是计算出重复指数,并将对移动平均线的贡献相加:
现在,您可以获得指数列表,其中移动平均值超过0.5,如下所示:
至于性能,首先将上述代码转换为函数:
下面是几种窗口大小的时间安排,对于开头描述的测试数据:
相关问题 更多 >
编程相关推荐