0

この巨大な (61GB) FASTQファイルがあり、ランダムなサブセットを作成したいのですが、メモリにロードできません。FASTQ の問題は、4 行ごとに 1 つに属していることです。それ以外の場合は、ランダムな整数のリストを作成し、これらの整数の行のみをサブセット ファイルに書き込みます。

これまでのところ、私はこれを持っています:

import random
num = []    
while len(num) < 50000000:
    ran = random.randint(0,27000000)
    if (ran%4 == 0) and (ran not in num):
        num.append(ran)
num = sorted(num)

fastq = open("all.fastq", "r", 4)
subset = open("sub.fastq", "w")
for i,line in enumerate(fastq):
    for ran in num:
        if ran == i:
            subset.append(line)

次のランダム整数に進む前に、ファイル内の次の 3 行に到達する方法がわかりません。誰かが私を助けることができますか?

4

2 に答える 2

1
  1. 4 行のチャンクでファイルを反復処理します。
  2. その反復子からランダムなサンプルを取得します。

アイデアは、ランダムアクセスなしでジェネレーターからサンプリングし、それを反復して各要素を順番に選択する (または選択しない) ことができるということです。

于 2013-01-17T09:03:48.647 に答える
0

これを試すことができます:

import random
num = sorted([random.randint(0,27000000/4)*4 for i in range(50000000/4)])

lines_to_write = 0
with open("all.fastq", "r") as fastq:
    with open("sub.fastq", "w") as subset:
        for i,line in enumerate(fastq):
            if len(num)==0:
                break
            if i == num[0]:
                num.pop(0)
                lines_to_write = 4
            if lines_to_write>0:
                lines_to_write -= 1
                subset.write(line)
于 2013-01-17T09:05:08.317 に答える