Как создать огромную разреженную матрицу с dtype = float16? - PullRequest
0 голосов
/ 01 июня 2018

Я пробовал все это, и у меня была ошибка памяти или какая-то другая ошибка.

Matrix1 = csc_matrix((130000,130000)).todense()

Matrix1 = csc_matrix((130000,130000), dtype=float_).todense()

Matrix1 = csc_matrix((130000,130000), dtype=float16).todense()

Как я могу создать огромную разреженную матрицу с плавающим типом данных?

1 Ответ

0 голосов
/ 01 июня 2018

Чтобы создать огромную разреженную матрицу, просто делайте то, что вы делаете:

Matrix1 = csc_matrix((130000,130000), dtype=float16)

… без вызова todense() в конце.Это успешно, и занимает небольшое количество памяти. 1

Когда вы добавляете todense(), это успешно создает огромный разреженный массив, который занимает крошечный объем памяти, а затем пытаетсяпреобразовать это в плотный массив, который занимает огромное количество памяти, которая терпит неудачу с MemoryError.Но решение этой проблемы просто ... не делайте этого.

И аналогично, если вы используете dtype=float_ вместо dtype=float16, вы получите значения float64 (которые не являютсячто вы хотите, и возьмите в 4 раза больше памяти), но опять же, решение просто ... не делайте этого.


1.sys.getsizeof(m) дает 56 байтов для дескриптора разреженного массива, sys.getsizeof(m.data) дает 96 байтов для дескриптора внутреннего хранилища, а m.data.nbytes дает 0 байтов для фактического хранилища, что в сумме составляет 152 байта.Что вряд ли поднимет MemoryError.

...