Я хочу поэтапно построить чрезвычайно большую разреженную матрицу. Проблема в том, что lil_matrix
занимает так много ОЗУ, что становится неэффективным. Например, если я хочу создать 20 миллионов x 20 миллионов lil_matrix
, он полностью ударит мою RAM. С другой стороны, csr_matrix
едва занимает пространство. Однако csr_matrix
якобы неэффективен для модификаций. Есть ли другой способ получить преимущество lil_matrix
, не занимая столько места в ОЗУ? Кроме того, почему он занимает столько места, в первую очередь, поскольку он должен быть разреженной матрицей?Python: lil_matrix vs csr_matrix в чрезвычайно больших разреженных матрицах
Примечание: Реальная проблема на самом деле не создает такую большую матрицу, но вместо того, чтобы создавать следующие list
:
list = [sp.lil_matrix((150,150)) for i in range(1000)]
который также взрывает мой RAM.
Из эксперимента, кажется, что lil_matrix() угадывает структуру разреженности, которая довольно щедрая. Таким образом, каждая построенная матрица занимает больше памяти, чем вы/возможно. csr_matrix медленнее для индексированного присвоения, но более консервативен при первоначальном распределении. В зависимости от ваших данных, вы можете добавить dtype = int в конструктор lil_matrix(). – gerowam