質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

10249閲覧

jupyter notebookにおけるメモリの問題

yu__

総合スコア108

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/04/22 04:57

jupyter notebookにおけるメモリの問題

jupyter notebookを使ってpython3を動かしていたのですが、

python

1import numpy as np 2a = np.random.rand(1000*1000*100*100)

結果

--------------------------------------------------------------------------- MemoryError Traceback (most recent call last) <ipython-input-68-45fd6582cf33> in <module> 1 import numpy as np ----> 2 a = np.random.rand(1000*1000*100*100) mtrand.pyx in mtrand.RandomState.rand() mtrand.pyx in mtrand.RandomState.random_sample() mtrand.pyx in mtrand.cont0_array() MemoryError:

となってメモリが足りないといわれます。
他の変数に確かにメモリがとられていることもあり、そちらの変数のキャッシュを消す方法はもちろん
あるのですが、そもそもjupyterのメモリを増やすことができればそれが一番良いと思うのですが、
メモリを増やす方法よりどの変数がメモリを食っているか、またその変数のキャッシュをどうやって消すかばかり書いてあり知りたい情報に出会えなかったので質問させていただきました。

bigdataの時代において、この程度でメモリが足りなくなるとは到底思えないので何かいい方法があると思うのですが、もし知っている方がいれば教えていただきたいです。
よろしくお願いいたします!!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

そもそもjupyterのメモリを増やすことができればそれが一番良いと思うのですが、

Jupyter Notebook は、とくに設定等しなくても PC に搭載してあるメモリは全部使えます。

bigdataの時代において、この程度でメモリが足りなくなるとは到底思えないので

numpy.random.rand() は numpy.float64 型の配列を返す関数ですが、
numpy.float64 型は1つの値を表すのに8 bytes (64 bits) 必要です。
今回、要素の数が 10001000100*100 = 10000000000 なので、必要なメモリ量を計算すると

10000000000 * 8 bytes = 80000000000 / 2^30 GB = 74.51 GB 必要ということになります。
一般的な家庭用PCが搭載しているメモリ量は 8GB、16GB とかなので、このサイズの配列を扱うのはメモリが足りなくて無理でしょう。
一般的な PC で扱える配列のサイズは 1000*1000 ぐらいと思っておいたほうがよいです。
それ以上大きいと、メモリに載ったとしても、計算時間がかかりすぎてしまいます。

投稿2019/04/22 05:14

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

要素数だけで10^10, 1要素表すのに8byteでいけるとしても(これは楽観的な見積もりなのですが)、8*10^10 byteに相当し、およそ80GBです。なので、そのへんのPCではメモリから溢れます。

「この程度で」と書く前に計算してみることです。

投稿2019/04/22 05:11

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問