🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

3272閲覧

pythonのnumpyでメモリーエラー

zer024

総合スコア3

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/01/21 10:21

実現したいこと

pythonのnumpyを用いて
data = np.zeros((2,2,5,10,24,24,400000)
の7次元配列を作りたかったのですが、
メモリーが不足してしまいました。
何か良い方法はありますでしょうか?

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

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

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

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

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

meg_

2021/01/21 10:40 編集

> data = np.zeros((2,2,5,10,24,24,400000) 質問のコードはSyntaxErrorになります。 > メモリーが不足してしまいました。 今の環境のままではどうしようもないかと思いますが。一度にその大きな配列を作成しなければならない理由があるのでしょうか?
tiitoi

2021/01/21 15:36

たぶん、やろうとしてる方針が間違ってる この要素数のコードを動かそうとするのではなく、まずコードの設計を見直しましょう
zer024

2021/01/22 03:01

意見ありがとうございます。 コード設計を見直してみます。 また、質問すると思いますので、その際はよろしくお願いします。
guest

回答2

0

ベストアンサー

  1. dtype を変える

numpy はデフォルトで float64array を作ろうとするのでそんなに精度が必要か考えてみてください。最悪 bool で良かったりしませんか?
2. 分割して処理する
一気に処理するのはメモリが足りないので適宜分割処理することも検討に入れましょう
3. メモリを積む
力で解決しましょう。もっとも 300 GB 以上積むとなるとサーバーマシンのようなものになりそうですが
4. AWS や GCP を利用する
これ以外と見落としがちなんですが、クラウドサービスでメモリめっちゃ積んであるインスタンス借りてお金で解決してしまうという方法があります。一見高そうですが使う時間とインスタンスを考えて決めれば大丈夫だと思います

投稿2021/01/21 10:49

A_kirisaki

総合スコア2853

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

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

meg_

2021/01/22 06:00

確かにAWSにメモリ豊富なインスタンスありますね。時間もコストですから良い選択肢だと思います。
guest

0

デフォルトだと各要素をfloatで生成するので、intに指定することでかなり減らせるようです。343GiB→42.9GiB ワークステーションなら動くかも...
それでもダメなら、7次元の配列を生成する以外の手段で目的を達成することを考えてはいかがでしょうか。

python3

1import numpy as np 2data = np.zeros((2,2,5,10,24,24,400000)) 3# MemoryError: Unable to allocate 343. GiB for an array with shape (2, 2, 5, 10, 24, 24, 400000) and data type float64

python3

1import numpy as np 2data = np.zeros((2,2,5,10,24,24,400000), np.int8) 3# MemoryError: Unable to allocate 42.9 GiB for an array with shape (2, 2, 5, 10, 24, 24, 400000) and data type int8

投稿2021/01/21 10:47

jeanbiego

総合スコア3966

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問