前提・実現したいこと
numpyで三次元配列の一部をシャッフルした配列を作りたい
エラーは出ないのですが、望んだ値が出ません。なんとなく原因はわかるのですが、どう直せばいいのかわかりません。
実行したいプログラムは以下のとおりです。
0. 333の三次元配列を作成する
0. その三次元配列から二次元配列の要素を取り出す
0. 取り出した二次元配列の、x成分のみをシャッフルする
0. シャッフルした二次元配列をもとの三次元配列にコピーする
今まで試した結果から、step1~3はおそらくうまく行っているのですが、step4で正しくペーストできていないのではないかと思っています。ただ、どのように配列の次元を合わせてペーストすればいいのかがわかりません。
もしわかる方がいらっしゃいましたら、ご回答よろしくおねがいします。
発生している問題・エラーメッセージ
エラーはありません。
正しい値が出力されません。
該当のソースコード
python
1import numpy as np 2 3a=np.array([[[0,0,0],[1,0,1]],[[0,0,0],[0,0,0]]]) 4l=list(a[0:2,1,:]) 5print(a) 6np.random.shuffle(l) 7print(l) 8a[0:2,1,:]=l 9print(a)
result
1[[[0 0 0] 2 [1 0 1]] 3 4 [[0 0 0] 5 [0 0 0]]] 6[array([0, 0, 0]), array([1, 0, 1])] 7[[[0 0 0] 8 [0 0 0]] 9 10 [[0 0 0] 11 [0 0 0]]]
試したこと
問題を簡単化しようとした結果、表題の問題にたどり着きました。
補足情報(FW/ツールのバージョンなど)
google colabにて記述
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/13 00:51