2

xとyの2つの変数があります。xは

type(x) = <class 'numpy.matrixlib.defmatrix.matrix'>

type(y) = <type 'numpy.ndarray'>

x.shape = (869250, 1)

y.shape = (869250,)

x + yは、約5 GBの空き容量があるにもかかわらず、MemoryErrorを発生させます。これはかなり奇妙に思えます-何が起こっているのかについて誰かが考えを持っていますか?

これは、64ビットLinux上のnumpy 1.5.1、python2.7です。

4

2 に答える 2

5

やりたいことをやっていてよろしいですか?

In [2]: x = np.random.normal(size=(500,1))

In [3]: y = np.random.normal(size=(500,))

In [4]: (x + y).shape
Out[4]: (500, 500)

これは、 numpyのブロードキャストルールのやや直感的でないアプリケーションです。結果は実際に869250 x 869250は、おそらくデフォルトで合計5.5テラバイトのストレージになりますnp.float64

ベクトルの合計が必要になる可能性が高くなります。(混乱することが多いですが...)xとして保持したい場合は、のようなことを行うことができます。matrixx + y.reshape(-1, 1)

于 2012-09-12T21:13:33.513 に答える
0

各アレイに必要なメモリ量を確認してみましたか?さて...ここにコメントを含めるために編集します:

In [14]: b = np.random.random((2,3))

In [16]: b.itemsize*b.size
Out[16]: 48


In [17]: b = np.random.random((200,3))

In [18]: b.itemsize*b.size
Out[18]: 4800

結果を保存する場所も必要だと想像してみてください...

numpy配列にどのような種類のデータがあるかを記述していませんが、各アイテムが8バイトの場合、最初のアイテム(x)はすでにかなり太っています。

In [19]: 869250*8/1024 # the output is the size in KB ...
Out[19]: 6791
于 2012-09-12T21:11:28.230 に答える