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

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

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

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

Python 3.x

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

Q&A

1回答

778閲覧

関数の引数の個数と返り値の個数をif文を使わずに変更したい。

rosbergf1

総合スコア13

NumPy

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

Python 3.x

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

1グッド

1クリップ

投稿2020/07/14 11:04

前提・実現したいこと

リストgridの要素としてnumpyのnumpy.meshgridの返り値を代入しているのですが、dimensionの値によって、引数の数と返り値の数を変更するようにしたいです。
現状ではif文で分岐させていますが、見づらいのとdimension == 100等の場合、対応が難しいです。

該当のソースコード

Python3

1axis_grid = [] 2for i in range(5): 3 axis_grid.append(np.linspace(-15, 15, 10)) 4 5dimension = len(axis_grid) 6 7grid = [] 8for i in range(dimension): 9 grid.append([]) 10if dimension == 2: 11 grid[0], grid[1] = np.meshgrid(axis_grid[0], axis_grid[1]) 12elif dimension == 3: 13 grid[0], grid[1], grid[2] = np.meshgrid(axis_grid[0], axis_grid[1], axis_grid[2]) 14elif dimension == 4: 15 grid[0], grid[1], grid[2], grid[3] = np.meshgrid(axis_grid[0], axis_grid[1], axis_grid[2], axis_grid[3]) 16elif dimension == 5: 17 grid[0], grid[1], grid[2], grid[3], grid[4] = np.meshgrid(axis_grid[0], axis_grid[1], axis_grid[2], axis_grid[3], axis_grid[4]) 18elif dimension == 6: 19 grid[0], grid[1], grid[2], grid[3], grid[4], grid[5] = np.meshgrid(axis_grid[0], axis_grid[1], axis_grid[2], axis_grid[3], axis_grid[4], axis_grid[5]) 20elif dimension == 7: 21 grid[0], grid[1], grid[2], grid[3], grid[4], grid[5], grid[6] = np.meshgrid(axis_grid[0], axis_grid[1], axis_grid[2], axis_grid[3], axis_grid[4], axis_grid[5], axis_grid[6]) 22elif dimension == 8: 23 grid[0], grid[1], grid[2], grid[3], grid[4], grid[5], grid[6], grid[7] = np.meshgrid(axis_grid[0], axis_grid[1], axis_grid[2], axis_grid[3], axis_grid[4], axis_grid[5], axis_grid[6], axis_grid[7]) 24elif dimension == 9: 25 grid[0], grid[1], grid[2], grid[3], grid[4], grid[5], grid[6], grid[7], grid[8] = np.meshgrid(axis_grid[0], axis_grid[1], axis_grid[2], axis_grid[3], axis_grid[4], axis_grid[5], axis_grid[6], axis_grid[7], axis_grid[8]) 26elif dimension == 10: 27 grid[0], grid[1], grid[2], grid[3], grid[4], grid[5], grid[6], grid[7], grid[8], grid[9] = np.meshgrid(axis_grid[0], axis_grid[1], axis_grid[2], axis_grid[3], axis_grid[4], axis_grid[5], axis_grid[6], axis_grid[7], axis_grid[8], axis_grid[9]) 28elif dimension == 11: 29 grid[0], grid[1], grid[2], grid[3], grid[4], grid[5], grid[6], grid[7], grid[8], grid[9], grid[10] = np.meshgrid(axis_grid[0], axis_grid[1], axis_grid[2], axis_grid[3], axis_grid[4], axis_grid[5], axis_grid[6], axis_grid[7], axis_grid[8], axis_grid[9], axis_grid[10]) 30elif dimension == 12: 31 grid[0], grid[1], grid[2], grid[3], grid[4], grid[5], grid[6], grid[7], grid[8], grid[9], grid[10], grid[11] = np.meshgrid(axis_grid[0], axis_grid[1], axis_grid[2], axis_grid[3], axis_grid[4], axis_grid[5], axis_grid[6], axis_grid[7], axis_grid[8], axis_grid[9], axis_grid[10], axis_grid[11])
DrqYuto👍を押しています

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

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

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

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

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

guest

回答1

0

リストを分解して、引数に渡したい場合はアンパックを使います。

4. その他の制御フローツール — Python 3.8.4 ドキュメント

def f(a, b, c): print(a, b, c) vals = [1, 2, 3] f(*vals) # 1 2 3

これを使って上記コードを簡略化すると、以下のようになります。

python

1import numpy as np 2 3dims = 3 # 次元数 4vals = np.linspace(-15, 15, 5) # 範囲 5 6# [vals] * dims は [vals, vals, ..., vals] という配列を作るのに利用 7args = [vals] * dims 8grid = np.meshgrid(*args) 9print(grid)

ちなみに次元を増やすと必要なメモリ量は指数関数的に増えますので、meshgrid() は普通 dims=2, 3 あたりで使うものであり、高次元の配列を作るということは基本的にないと思います。

len(vals) = 5 の場合

dimnumber of elementsbytes (float64)
011080.0B
122001.6KiB
23300023.4KiB
3440000312.5KiB
455000003.8MiB
56600000045.8MiB
6770000000534.1MiB
788000000006.0GiB
89900000000067.1GiB
910100000000000745.1GiB

投稿2020/07/14 11:20

編集2020/07/14 11:30
tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問