Чтобы создать огромную разреженную матрицу, просто делайте то, что вы делаете:
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
.