首页 > 解决方案 > np.array 文本内存大小

问题描述

我有一个(可能很长)字符串的列表。

当我将它转换为 np.array 时,我很快就会用完 RAM,因为它似乎比简单的列表占用更多的内存。为什么以及如何处理它?或者也许我只是做错了什么?

编码:

import random
import string
import numpy as np
from sys import getsizeof

cnt = 100 
sentences = []

for i in range(0, cnt):
    word_cnt = random.randrange(30, 100)
    words = []
    for j in range(0, word_cnt):
        word_length = random.randrange(20)
        letters = [random.choice(string.ascii_letters) for x in range(0, word_length)]
        words.append(''.join(letters))
    sentences.append(' '.join(words))

list_size = sum([getsizeof(x) for x in sentences]) + getsizeof(sentences)
print(list_size)

arr = np.array(sentences)
print(getsizeof(arr))
print(arr.nbytes)

输出:

76345
454496
454400

我不确定我getsizeof()是否正确使用,但是当我注意到内存问题时我开始调查它,所以我很确定发生了什么事:)

(奖金问题)

我正在尝试运行类似于https://autokeras.com/examples/imdb/的东西。原始示例需要大约 3GB 的内存,我想使用更大的数据集。也许有更好的方法?

我在 Ubuntu 18.04 上使用带有 numpy==1.17.0 的 python3.6.9。

标签: pythonnumpymemoryauto-keras

解决方案


推荐阅读