1か月を30日として、1か月に2回行動をとるとします。行動を20種類として、random関数を使って、以下のような関数を作成しました。元々、この関数は行動1から行動20までを一様分布でランダムに行動を発生させるつもりでした。ですので、各行動の出現頻度は、全体100% ÷ 20 = 5%になるように設計されているのですが、
これを行動19と行動20をそれぞれ、全体の20%ずつ発生させるためにはどうすればよいでしょうか。random関数で調べて重みのかけ方がわかりませんでした。
ご教授いただけますと幸いです。
python
1def random_part(): 2 days = 30 3 actions = 20 4 do_day = 2 5 do_action = 1 6 7 s = np.hstack([ 8 np.ones((do_day, do_action)), 9 np.zeros((do_day, actions - do_action)), 10 ]) 11 12 # shuffle column wise 13 idx = np.random.rand(*s.shape).argsort(axis=1) 14 s = np.take_along_axis(s, idx, axis=1) 15 16 # shuffle row wise 17 s = np.vstack([s, np.zeros((days-do_day, actions))]).astype(int) 18 np.random.shuffle(s) 19 20 # dataframe 21 df = pd.DataFrame(s, columns=[f'行動{i+1}' for i in range(actions)]) 22 return df
何卒、よろしくお願い申し上げます。
回答4件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/06/30 06:25