在Python中进行巨大矩阵的矩阵运算

5

有人知道如何在Python中处理巨大的矩阵吗?我需要处理形状为(10^6,10^6)的邻接矩阵,并执行包括加法、缩放和点积在内的操作。使用numpy数组时,我遇到了内存问题。


4
如果假设每个值只占用 1 字节,那就需要大约 1 TB 的 RAM…你的矩阵是稀疏的吗? - CookieOfFortune
1
据说 PyTables 可以帮助处理非常大的矩阵,还有其他一些工具(http://www.h5py.org/)。 - Joran Beasley
1个回答

6
像这样怎么样...
import numpy as np

# Create large arrays x and y.
# Note they are 1e4 not 1e6 b/c of memory issues creating random numpy matrices (CookieOfFortune) 
# However, the same principles apply to larger arrays
x = np.random.randn(10000, 10000)
y = np.random.randn(10000, 10000)

# Create memory maps for x and y arrays
xmap = np.memmap('xfile.dat', dtype='float32', mode='w+', shape=x.shape)
ymap = np.memmap('yfile.dat', dtype='float32', mode='w+', shape=y.shape)

# Fill memory maps with data
xmap[:] = x[:]
ymap[:] = y[:]

# Create memory map for out of core dot product result
prodmap = np.memmap('prodfile.dat', dtype='float32', mode='w+', shape=x.shape)

# Due out of core dot product and write data
prodmap[:] = np.memmap.dot(xmap, ymap)

# Create memory map for out of core addition result
addmap = np.memmap('addfile.dat', dtype='float32', mode='w+', shape=x.shape)

# Due out of core addition and write data
addmap[:] = xmap + ymap

# Create memory map for out of core scaling result
scalemap = np.memmap('scalefile.dat', dtype='float32', mode='w+', shape=x.shape)

# Define scaling constant
scale = 1.3

# Do out of core  scaling and write data
scalemap[:] = scale * xmap

这段代码将会创建二进制格式的xfile.dat、yfile.dat等文件,其中包含数组。之后,您只需要使用np.memmap(filename)来访问它们。虽然np.memmap的其他参数是可选的,但建议您使用(例如dtype、shape等参数)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接