gpt4 book ai didi

python - python中的巨大稀疏矩阵

转载 作者:行者123 更新时间:2023-11-28 22:47:27 25 4
gpt4 key购买 nike

我需要在 numpy/scipy 中迭代构建一个巨大的稀疏矩阵。初始化在一个循环中完成:

from scipy.sparse import dok_matrix, csr_matrix

def foo(*args):
dim_x = 256*256*1024
dim_y = 128*128*512
matrix = dok_matrix((dim_x, dim_y))

for i in range(dim_x):
# compute stuff in order to get j
matrix[i, j] = 1.
return matrix.tocsr()

然后我需要将它转换为 csr_matrix,因为进一步的计算如下:

matrix = foo(...)
result = matrix.T.dot(x)

一开始这工作正常。但是我的矩阵越来越大,我的电脑开始崩溃。有没有更优雅的矩阵存储方式?

基本上我有以下要求:

  • 矩阵需要存储从 0. 到 1 的浮点值。
  • 我需要计算矩阵的转置
  • 我需要用 x_dimensional 向量计算点积
  • 矩阵维度可以在 1*10^9 x 1*10^8 左右

我的 ram-storage 超出了。我正在阅读有关堆栈溢出和互联网其余部分的几篇文章;)我找到了 PyTables,它并不是真正为矩阵计算而设计的……等等。有更好的方法吗?

最佳答案

对于您的情况,我建议使用数据类型 np.int8(或 np.uint8),每个元素只需要一个字节:

matrix = dok_matrix((dim_x, dim_y), dtype=np.int8)

直接构造 csr_matrix 还可以让您进一步使用最大矩阵大小:

from scipy.sparse import csr_matrix

def foo(*args):
dim_x = 256*256*1024
dim_y = 128*128*512
row = []
col = []

for i in range(dim_x):
# compute stuff in order to get j
row.append(i)
col.append(j)
data = np.ones_like(row, dtype=np.int8)

return csr_matrix((data, (row, col)), shape=(dim_x, dim_y), dtype=np.int8)

关于python - python中的巨大稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26228059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com