У меня есть список (возможно, длинных) строк.
Когда я конвертирую его в np.array, у меня довольно быстро заканчивается ОЗУ, потому что кажется, что он занимает гораздо больше памяти, чем простой список. Почему и как с этим бороться? Или, может, я просто что-то не так делаю?
Код:
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/. Исходный пример требует около 3 ГБ памяти, и я хотел использовать больший набор данных. Может быть, есть какой-нибудь лучший способ?
Я использую python3 .6.9 с numpy == 1.17.0 в Ubuntu 18.04.