回答編集履歴

3

追記

2018/03/31 08:31

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -81,3 +81,19 @@
81
81
 
82
82
 
83
83
  [参考(numpy公式)](https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.random.choice.html)
84
+
85
+
86
+
87
+ ### 更に追記
88
+
89
+ ドキュメントをちゃんと読んだら、第一引数には1-D array likeも渡せました。
90
+
91
+ なので、もっと簡単にこう書けます。
92
+
93
+ ```python
94
+
95
+ np.random.choice(["大吉", "中吉", "小吉"], p=[0.1, 0.3, 0.6])
96
+
97
+ ```
98
+
99
+ 難しいことをする必要はありませんでした・・・。

2

構文の改善

2018/03/31 08:31

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -42,9 +42,11 @@
42
42
 
43
43
  ### 追記
44
44
 
45
- 回答書いてからぐぐってたらnumpy 1.7.0以降を使えば次のように書けるということを知りました。
45
+ 回答書いてからぐぐってたらnumpy 1.7.0以降を使えば次のように書けるということを知りました。
46
46
 
47
47
  ```python
48
+
49
+ import numpy as np
48
50
 
49
51
  def omikuji():
50
52
 

1

追記

2018/03/30 18:57

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -37,3 +37,45 @@
37
37
  601
38
38
 
39
39
  ```
40
+
41
+
42
+
43
+ ### 追記
44
+
45
+ 回答書いてからぐぐってたらnumpy 1.7.0以降を使えば次のように書けるということを知りました。
46
+
47
+ ```python
48
+
49
+ def omikuji():
50
+
51
+ results = ["大吉", "中吉", "小吉"]
52
+
53
+ return results[np.random.choice(3, p=[0.1, 0.3, 0.6])]
54
+
55
+ ```
56
+
57
+ もうちょっと頑張ってカスタマイズ性を考慮した結果、こうなりました。
58
+
59
+ ```python
60
+
61
+ >>> def proba_select(ret_proba_dict):
62
+
63
+ ... index = sorted(ret_proba_dict.keys())
64
+
65
+ ... probas = np.array([ret_proba_dict[i] for i in index])
66
+
67
+ ... probas = probas/(probas.sum())
68
+
69
+ ... return index[np.random.choice(len(index), p=probas)]
70
+
71
+ ...
72
+
73
+ >>> omikuji = lambda : proba_select({"大吉":0.1, "中吉":0.3, "小吉":0.6})
74
+
75
+ ```
76
+
77
+ まあ、ここまでやる必要はないかもしれませんが・・・。
78
+
79
+
80
+
81
+ [参考(numpy公式)](https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.random.choice.html)