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

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

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

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

Q&A

解決済

3回答

861閲覧

pythonでの配列の初期化

nekohouse

総合スコア17

Python

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

0グッド

1クリップ

投稿2021/02/08 04:25

前提・実現したいこと

配列の初期化で以下のコードで3*2の配列であるRanの定義の部分が長いのでもっと短くスマートに書く方法はないでしょうか?

該当のソースコード

python

1import numpy as np 2import random 3 4Min =np.array([[3, 4],[7, 8],[11, 12]]) 5Max =np.array([[6, 7],[10, 11],[14, 15]]) 6 7Ran =np.array([[random.randint(Min[0, 0], Max[0, 0]), random.randint(Min[0, 1], Max[0, 1])],[random.randint(Min[1, 0], Max[1, 0]), random.randint(Min[1, 1], Max[1, 1])],[random.randint(Min[2, 0], Max[2, 0], random.randint(Min[2, 1], Max[2, 1]]])

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

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

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

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

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

guest

回答3

0

解決済みですが、numpy.vecotorizeでもいけそうです。

python

1import numpy as np 2import random 3 4Min = np.array([[3, 4], [7, 8], [11, 12]]) 5Max = np.array([[6, 7], [10, 11], [14, 15]]) 6 7@np.vectorize 8def initialize(min_, max_): 9 return random.randint(min_, max_) 10 11Ran = initialize(Min, Max)

投稿2021/02/08 10:31

bsdfan

総合スコア4794

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

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

0

これってどの成分も取りうる値が4種類なので

python

1np.random.randint(0, 4, Min.shape) + Min

でよくないですか?

投稿2021/02/08 06:27

編集2021/02/08 06:29
kirara0048

総合スコア1399

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

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

nekohouse

2021/02/08 06:44

ありがとうございます 質問のためなるべく簡略化して書いたのですが実際のコードだともう少し複雑でとりうる値の幅もバラバラです 書き方が悪かったです、すいません
guest

0

ベストアンサー

たとえば内包表記つかってみて以下のような変更でどうでしょうか。

python3

1import numpy as np 2import random 3 4Min =np.array([[3, 4],[7, 8],[11, 12]]) 5Max =np.array([[6, 7],[10, 11],[14, 15]]) 6 7# 元のコード 8Ran = np.array([ 9 [random.randint(Min[0, 0], Max[0, 0]), random.randint(Min[0, 1], Max[0, 1])], 10 [random.randint(Min[1, 0], Max[1, 0]), random.randint(Min[1, 1], Max[1, 1])], 11 [random.randint(Min[2, 0], Max[2, 0]), random.randint(Min[2, 1], Max[2, 1])] 12 ]) 13print(Ran) 14# [[ 3 6] 15# [ 9 9] 16# [13 13]] 17 18# 内包表記 19Ran_2 = np.array([[random.randint(Min[i, 0], Max[i, 0]), random.randint(Min[i, 1], Max[i, 1])] for i in range(3)]) 20print(Ran_2) 21# [[ 3 4] 22# [ 7 9] 23# [12 15]] 24 25# 内包表記+zip 26Ran_3 = np.array([[random.randint(mi[0], ma[0]), random.randint(mi[1], ma[1])] for mi, ma in zip(Min, Max)]) 27print(Ran_3) 28# [[ 6 7] 29# [ 9 8] 30# [11 13]] 31 32# 関数 33def rnd(i, j): 34 return random.randint(Min[i, j], Max[i, j]) 35Ran_4 = np.array([[rnd(i, 0), rnd(i, 1)] for i in range(3)]) 36print(Ran_4) 37# [[ 3 6] 38# [ 7 8] 39# [11 13]]

投稿2021/02/08 04:43

編集2021/02/08 04:46
jeanbiego

総合スコア3966

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

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

nekohouse

2021/02/08 05:05

ありがとうございます! zip表記など勉強になりました Ran = np.array([[random.randint(Min[i, j], Max[i, j])for j in range(2)] for i in range(3)]) 教えてもらった内包表記を使ってこれで走らせてみたところ大丈夫そうなのでこれでいこうと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問