如何使用 dtype=float16 创建巨大的稀疏矩阵?

How to create huge sparse matrix with dtype=float16?

我已经尝试了所有这些并且遇到了内存错误或某种其他错误。

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

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

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

如何创建一个带有 float 类型数据的巨大稀疏矩阵?

要创建一个巨大的稀疏矩阵,只需按照您正在做的去做:

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.