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

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

詳細はこちら
Python

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

Q&A

解決済

2回答

743閲覧

Pythonの関数において*argの引数を動的に設定する方法

UZK

総合スコア1

Python

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

0グッド

0クリップ

投稿2021/03/03 06:24

前提・実現したいこと

numpy.meshgridにて格子点を発生させる際に、変数の数が動的に変更される(例えばユーザーの入力次第で2次元だったり3次元だったりする)場合に、変数の数に応じてmeshgridを使えるようにしたい。
(例)ユーザーが変数の数(および水準)を自由に設定して、設定された変数に応じて自動でグリッド点を発生させたい。

できること

python

1import numpy as np 2a = np.arange(0, 10, 1) 3b = np.arange(2, 12, 1) 4c = np.arange(5, 10, 1) 5np.meshgrid(a,b,c)

当然上のようにすると正しくgrid点を発生できますが、例えば変数の数をユーザーが以下のように入力し
(実際は水準含めて自分で入力できるようにしますが)

変数の選択

python

1variables_num = int(input('the number of variable')) 2variable_selected = variable_list[:variables_num]

その選択された変数の数に応じてmeshgridを使う方法がわかりません。

試したこと

python

1np.meshgrid(variable_selected)

当たり前ですが望む格子点は得られません。

以上を通して素朴な疑問として*argに引数を動的に入力できる方法はないか気になりました。
何か良い方法があれば教えていただけますと幸いです。

(併せて本来の目的である何かユーザーの入力に応じて自動で格子点を生成できるより良い方法があれば教えていただけますと幸いです。*argに引数を動的に入力できる方法以外でも構いません。)

よろしくお願いいたします。

補足情報

Python 3.7を使用

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

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

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

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

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

guest

回答2

0

python

1np.meshgrid(*variable_selected)

投稿2021/03/03 06:50

ozwk

総合スコア13551

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

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

UZK

2021/03/03 07:06

ありがとうございます!!そんな単純なことだったのですね…検索が下手くそな初心者でしたがご回答いただけて大変助かります!!
guest

0

ベストアンサー

*を使って引数を展開してあげれば良いかと思います。

python3

1import numpy as np 2arr = np.array(range(21)).reshape([7,3]) 3print(arr) 4# [[ 0 1 2] 5# [ 3 4 5] 6# [ 6 7 8] 7# [ 9 10 11] 8# [12 13 14] 9# [15 16 17] 10# [18 19 20]] 11 12def v_mesh(variable_list): 13 variables_num = int(input('the number of variable')) 14 variable_selected = variable_list[:variables_num] 15 return np.meshgrid(*variable_selected) 16print(v_mesh(arr)) 17# input -> 2の場合 18# [array([[0, 1, 2], 19# [0, 1, 2], 20# [0, 1, 2]]), array([[3, 3, 3], 21# [4, 4, 4], 22# [5, 5, 5]])]

投稿2021/03/03 06:49

jeanbiego

総合スコア3966

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

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

UZK

2021/03/03 07:07

ありがとうございます。何故そこに行きつけなかったか自分でも不思議です…とても助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問