如何将 'n' 数组保存到 'n' npy 文件?

How to save 'n' arrays to 'n' npy files?

我的文件中有这样的字符串:

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

我需要 one-hot encode 每行并保存到一个 numpy 二进制文件。我为任务写了这个函数。

def ohe(padded_file):
    integer_encoder = LabelEncoder()  
    one_hot_encoder = OneHotEncoder(categories='auto')   
    input_features = []
    with open(padded_file, '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_file, '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)

它根据行数创建了多个文件,但它们都存储相同的数据,即最后一个字符串one-hot编码。我需要第一个文件用第一行单热编码,第二个文件用第二行单热编码等等。 我做错了什么?

使用不读取整个文件而是逐行读取的结构

    with open(padded_file, 'r') as padded:
        for i,linha in enumerated(padded):
            linha = linha.strip()
            # ....other stuff
            save(f'arr_{i}.npy',stacked)