我需要使用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 = nu