bugfix> python > 投稿

私はファイルにこれらのような文字列を持っています:

tactccctccatcccataatataagacatggtcaaacttggcacggtcttcaaaactaatctttaacttttaatttctca
gttggtatcagaggagtggtcctcggaggtttccgcgacggcgccgtccaccaaaccttccgtgcagacgcgtctgctgc
tgttatggtgggtaaaacatatgaaaggcggcccaagcagcccataggccaggccacgccatgagatcaagattaaaggg
tgttcaggccagcaatggacagtttccgggcactgtgccggctccgcgcgcctcggtcccggctcgcgctcgcgcgctcg
cgttatcagcacgagctgcctaagctaatagatactaaaaaaaaatttctgataaaaaaccatatttattatcgactcat
aaagtggtatcagagcttgaagatcctaaagatggcgagtaacaatgttcccttccaagtcccggtgctcacaaagagca
tggtatcagacagccgatcacaagcttccgctccctaacccatcgccgacgacctcaccggccaccacatcctcttctcc
gctggaatagctcagttggttagagcgtgtggctgttaaccacaaggtcggaggttcaagccctccttctagcgcttttt
gagcactgctcccgtccagcaaacggtaccccaggtaccggtaccccggtacgaaacttaatctgaccattgaattagag
gtgttaacccagatcaaatgcctcgttccctgggccgcctcattgtgaggggaagtattgcgacaagtcactaactcttc
cttgagcagagagttgctcattggaatactacaatattcatatattttactggagcttctaaacggattccttcaccatg
aagtgtgatgattggaggtgtgcgggttcgagcgctgtacaactacaccggagaggagcctgatgagctctccttcaaat
gtccactgacctgtaatagagaactggattgctcatgagaccccgatcgttcacttgtaatacattgatagttttcttta
atcaacgggagatgtccaagaccgaataactaagcgaattagtttggacttatcagcgaaatttcagtgatgctgaaagc
aaaatcagtttatcaacgggagatgtccaagaccgaataactaagcgaattagtttggacttatcagcgaaatttcagtg
ctactatgtttaaaaatatgttgaacaaaaaattctctctgttaaaaaaaacagttgggaaatatttttcgaacaattaa
gtaatagccagtcgcacctctactgtactcgaaatacatgtcagtgagattaacattcattattctgaccagacggctta
ttggccatcaaatgagggaaacaggccagctcctcgacaaaaaaagtggcatgagatttatcaaaggattgagaaatgcc

する必要があるワンホットエンコード 各行とnumpyバイナリファイルに保存します。このタスクのためにこの関数を作成しました。

def ohe(padded_file):
    integer_encoder = LabelEncoder()  
    one_hot_encoder = OneHotEncoder(categories='auto')   
    input_features = []
    with open(padded, 'r') as padded:
        padded = padded.readlines()
        arr_nums = [i for i in range(len(padded))]
        for linha in padded:
            linha = linha.strip()
            integer_encoded = integer_encoder.fit_transform(list(linha))
            integer_encoded = np.array(integer_encoded).reshape(-1, 1)
            one_hot_encoded = one_hot_encoder.fit_transform(integer_encoded)
            stacked = np.stack(one_hot_encoded.toarray())
            input_features.append(stacked)
        np.savez_compressed("seq_arrays.npz", *input_features)

それは機能しますが、何千行もの長い文字列を含む大きなファイルを処理する必要がある場合、コンピューターのRAM容量によっては、その仕事を行うことができません。したがって、後者の場合、行ごとにnumpyのバイナリファイルを作成してから、同じ圧縮ファイルに結合したり、必要に応じて使用できるようにディレクトリに入れたりすることができます。私が次のことをしたWRT:

def ohe(padded_file):
    integer_encoder = LabelEncoder()  
    one_hot_encoder = OneHotEncoder(categories='auto')   
    with open(padded, 'r') as padded:
        padded = padded.readlines()
        arr_nums = [i for i in range(len(padded))]
        for linha in padded:
            linha = linha.strip()
            integer_encoded = integer_encoder.fit_transform(list(linha))
            integer_encoded = np.array(integer_encoded).reshape(-1, 1)
            one_hot_encoded = one_hot_encoder.fit_transform(integer_encoded)
            stacked = np.stack(one_hot_encoded.toarray())
            for num in arr_nums:
                save(f'arr_{num}.npy',stacked)

行数に基づいて多数のファイルを作成しますが、それらはすべて同じデータを格納します。これは、ワンホットエンコードされた最後の文字列です。最初のファイルの最初の行をワンホットエンコードし、2番目のファイルの2行目をワンホットエンコードする必要があります。 私は何が間違っているのですか?