我已经尝试了所有这些并且有内存错误或某种其他错误。
Matrix1 = csc_matrix((130000,130000)).todense()
Matrix1 = csc_matrix((130000,130000), dtype=float_).todense()
Matrix1 = csc_matrix((130000,130000), dtype=float16).todense()
如何使用float类型的数据创建一个巨大的稀疏矩阵?
答案 0 :(得分:0)
要创建一个巨大的稀疏矩阵,只需完成您正在做的事情:
Matrix1 = csc_matrix((130000,130000), dtype=float16)
...最后没有打电话给todense()
。这成功了,占用了很少的内存。 1
当你添加todense()
时,它成功地创建了一个占用少量内存的巨大稀疏数组,然后尝试将其转换为占用大量内存的密集数组,这会导致{ {1}}。但解决方法就是......不要这样做。
同样,如果你使用dtype=float_
而不是MemoryError
,你会获得float64值(它们不是你想要的,占用内存的4倍),但同样,解决方案是只是......不要这样做。
<子> 1。 dtype=float16
为稀疏数组句柄提供56个字节,sys.getsizeof(m)
为内部存储句柄提供96个字节,sys.getsizeof(m.data)
为实际存储提供0个字节,总共152个字节。这不太可能引发m.data.nbytes
。