teratail header banner
teratail header banner
質問するログイン新規登録

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

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

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

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python

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

Q&A

解決済

2回答

668閲覧

pythonで辞書型内の各キーに対応する配列の要素をランダムに取り出す方法

teefpc

総合スコア112

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python

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

0グッド

0クリップ

投稿2022/02/22 12:19

編集2022/02/22 12:21

0

0

pythonか、PyTorchで辞書型内の各キー内の配列の要素を縦軸を決めてランダムに取り出す方法はありますか?
以下のとおり、1発か2発でできるコマンドがあるのか探しています。

Python

1dic = {} 2dic['a'] = [1,2,3,4] 3dic['b'] = [10,20,30,40] 4#・・・ 5 6# どのキーの要素も同じ軸で取り出したい 7rnd = 関数(dic, 抽出個数=2) 8print(rnd['a']) # [2, 4] 9print(rnd['b']) # [20, 40] 10 11rnd = 関数(dic, 抽出個数=2) 12print(rnd['a']) # [4, 1] 13print(rnd['b']) # [40, 1]

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

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

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

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

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

takasima20

2022/02/22 12:24

ふつうにランダムなインデックスで参照すれば?
teefpc

2022/02/22 12:31

それでは、それぞれのキーでランダムになりませんか?
takasima20

2022/02/22 12:46

ランダムなインデックスのリストを作り、それを参照して a と b から抽出するようにしたらいいんじゃ?
takasima20

2022/02/22 12:49

あー、既存の機能を探しているということですか? これは失礼しました。
guest

回答2

0

  • 1発か2発でできるコマンドがあるのか探しています。

ありません。

コードを組むなら以下のようになります。

Python

1>>> dic = {} 2>>> dic['a'] = [1,2,3,4] 3>>> dic['b'] = [10,20,30,40] 4>>> 5>>> import random 6>>> 7>>> def select(d, n): 8... length = min(len(v) for f in dic.values()) 9... indices = random.sample(range(length), n) 10... return {key:[d[key][i] for i in indices] for key in d} 11... 12>>> print(select(dic, 2)) 13{'a': [1, 2], 'b': [10, 20]} 14>>> print(select(dic, 2)) 15{'a': [3, 2], 'b': [30, 20]} 16>>> print(select(dic, 2)) 17{'a': [1, 2], 'b': [10, 20]} 18>>> print(select(dic, 2)) 19{'a': [1, 3], 'b': [10, 30]}

投稿2022/02/22 12:50

ppaul

総合スコア24672

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

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

teefpc

2022/02/22 13:13

これは凄いです。見事なアルゴリズムなので、勉強させていただきます。
guest

0

ベストアンサー

1発か2発ということは関数を実装するのではなく既存の機能で実現できるものがないか探しているということでしょうか?
標準だとちょっと思いつきませんがnumpyならキーを配列で指定して抜き出すことで似たような感じにできるんじゃないですかね。
PyTorch使うならnumpyも使ってると思いますが…

py

1dic = {} 2dic['a'] = np.array([1,2,3,4]) 3dic['b'] = np.array([10,20,30,40]) 4# dicの要素はリストではなくnumpy配列にする 5 6length = len(dic.values()[0]) # 各配列の長さ (4) 7cols = np.random.permutation(length)[:num] # ランダムなnum個の縦軸 8 9print(cols) # array([2,4]) (cols例) 10 11print(dic['a'][cols]) # array([2, 4]) 12print(dic['b'][cols]) # array([20, 40]) 13 14print(dic['a'][cols].tolist()) # [2, 4] 15print(dic['b'][cols].tolist()) # [20, 40] 16

投稿2022/02/22 12:47

編集2022/02/22 12:52
kairi003

総合スコア1332

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

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

teefpc

2022/02/22 13:14

丁度、permutationを使えるか考えていました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問