python连续输出每个数字占4列_Python中的大量数字数组的高效存储器

这篇博客探讨了在Python中处理大型基因组数据集时遇到的内存和效率问题。作者通过numpy处理一个26亿个浮点数的数组,占用约20GB内存,并在MacBook Pro上运行。文章详细介绍了如何通过分块和内插方法生成数据,并对排序过程进行了优化。然而,当使用更高分辨率的内插文件时,排序速度显著下降。作者寻求关于在内存受限环境中提高排序效率的建议。
摘要由CSDN通过智能技术生成

我需要使用numpy排序一个非常大的基因组数据集.我有一个26亿个浮标数组,维数=(868940742,3),在我的机器上占用大约20GB的内存,只是坐在那里.我有一个早期的2015 13’MacBook Pro与16GB内存,500GB固态高清和3.1 GHz英特尔i7处理器.只是加载数组溢出到虚拟内存,但不是我的机器受损的程度,或者我不得不停止我所做的一切.

我从22个较小的(N,2)子阵列中逐步构建这个非常大的阵列.

函数FUN_1使用我称之为sub_arr的22个子阵列中的每一个生成2个新的(N,1)数组.

FUN_1的第一个输出是通过对数组b = array([X,F(X)])上的sub_arr [:,0]的值进行内插生成的,第二个输出是通过将sub_arr [:, 0]放入使用数组的bin中生成的r =数组([X,BIN(X)]).我分别称这些输出为b_arr和rate_arr.该函数返回一个3元组的(N,1)数组:

import numpy as np

def FUN_1(sub_arr):

"""interpolate b values and rates based on position in sub_arr"""

b = np.load(bfile)

r = np.load(rfile)

b_arr = np.interp(sub_arr[:,0], b[:,0], b[:,1])

rate_arr = np.searchsorted(r[:,0], sub_arr[:,0]) # HUGE efficiency gain over np.digitize...

return r[rate_r, 1], b_arr, sub_arr[:,1]

我在一个for循环中调用函数22次,并填充预先分配的零数组full_arr = numpy.zeros([868940742,3]),值为:

full_arr[:,0], full_arr[:,1], full_arr[:,2] = FUN_1

在这一步节省记忆方面,我认为这是我能做的最好的,但我可以接受建议.无论哪种方式,我都不会遇到这个问题,只需要2分钟.

这是排序例程(有两个连续的排序)

for idx in range(2):

sort_idx = numpy.argsort(full_arr[:,idx])

full_arr = full_arr[sort_idx]

# ...

#

现在这样一直工作,虽然缓慢(约10分钟).然而,我最近开始使用FUN_1中上述插值步骤的[X,F(X)]值更大,更精细的分辨率表,返回b_arr,现在SORT真的放慢速度,尽管其他一切都保持不变.

有趣的是,我甚至不排除在排序现在滞后的步骤中的内插值.以下是不同内插文件的一些片段 – 每种情况下,较小的插值文件大约减小约30%,而在第二列中的值更为均匀;较慢的分辨率和更多的唯一值,所以插值的结果可能更独特,但我不知道这是否应该有任何影响?

较大,较慢的文件:

17399307 99.4

17493652 98.8

17570460 98.2

17575180 97.6

17577127 97

17578255 96.4

17580576 95.8

17583028 95.2

17583699 94.6

17584172 94

更小,更统一的常规文件:

1 24

1001 24

2001 24

3001 24

4001 24

5001 24

6001 24

7001 24

我不知道可能导致这个问题,我会感兴趣的任何建议或只是一般的输入关于排序在这种类型的内存限制的情况下!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值