如何使用 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
.
我已经尝试了所有这些并且遇到了内存错误或某种其他错误。
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
.