5

Pythonで巨大な行列を操作する方法を知っている人はいますか?形状(10 ^ 6,10 ^ 6)の隣接行列を操作し、加算、スケーリング、内積などの操作を実行する必要があります。numpy配列を使用すると、RAMに問題が発生しました。

4

1 に答える 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、ectを作成します。後でそれらにアクセスするには、単に行う必要がありますnp.memmap(filename)。に対する他の引数np.memmapはオプションですが、推奨されます(dtype、shapeなどの引数)。

于 2013-03-26T21:22:19.727 に答える