質問編集履歴

3

PyPy, Cythonでの計測結果追加

2019/12/26 21:34

投稿

dameo
dameo

スコア943

test CHANGED
File without changes
test CHANGED
@@ -122,17 +122,21 @@
122
122
 
123
123
  ####測定結果
124
124
 
125
- |バージョン|#1(毎回keys())|#1(固定keys)|#2|
125
+ |Python実装|バージョン|#1(毎回keys())|#1(固定keys)|#2|補足|
126
126
 
127
- |:--|:--:|:--:|:--:|
127
+ |:--|:--:|:--:|:--:|:--:|:--:|
128
128
 
129
- |2.7.16|(計測断念)|(計測断念)|0.166±0.005|
129
+ |CPython|2.7.16|(計測断念)|(計測断念)|0.166±0.005|-|
130
130
 
131
- |3.7.3|0.1888±0.005|0.150±0.005|0.147±0.004|
131
+ |CPython|3.7.3|0.1888±0.005|0.150±0.005|0.147±0.004|-|
132
+
133
+ |PyPy|2.7.13|(計測断念)|(計測断念)|0.069±0.003|docker使用|
134
+
135
+ |PyPy|3.6.9|0.084±0.004|0.074±0.005|0.070±0.004|docker使用|
136
+
137
+ |Cython|3.7.3|0.157±0.010|0.109±0.003|0.107±0.004|Jupyter Notebook使用|
132
138
 
133
139
 
134
-
135
- Python実装: CPython
136
140
 
137
141
  単位: 秒
138
142
 
@@ -142,7 +146,7 @@
142
146
 
143
147
  ####考察
144
148
 
145
- 回数が十分ではないが、バージョンに依らず、```#2```の方法が速いように見える
149
+ バージョンに依らず、```#2```の方法が速いように見える
146
150
 
147
151
 
148
152
 

2

hayataka2049さんの回答より、dic.keys()を事前に計算する方式を追加。ついでに測定回数を100回にし、平均と標準偏差を出した。

2019/12/26 21:33

投稿

dameo
dameo

スコア943

test CHANGED
File without changes
test CHANGED
@@ -36,9 +36,23 @@
36
36
 
37
37
  import time
38
38
 
39
+ from math import sqrt
40
+
41
+
42
+
43
+ mean=lambda list: sum(list)/len(list)
44
+
45
+ def stdev(list):
46
+
47
+ avg = mean(list)
48
+
49
+ return sqrt(sum([(x-avg)*(x-avg) for x in list])/(len(list)-1))
50
+
39
51
 
40
52
 
41
53
  N=1000000
54
+
55
+ REP=100
42
56
 
43
57
  dic = {float(x):float(x) for x in range(N)}
44
58
 
@@ -60,15 +74,29 @@
60
74
 
61
75
  raise Exception
62
76
 
63
- print(end - start)
77
+ return end - start
64
78
 
65
79
 
66
80
 
67
- func(lambda x: x in dic)
81
+ def func2(f):
68
82
 
83
+ times = [func(f) for i in range(REP)]
84
+
85
+ print(str(mean(times)) + "\t" + str(stdev(times)))
86
+
87
+
88
+
89
+ func2(lambda x: x in dic)
90
+
91
+ keys = dic.keys()
92
+
93
+ func2(lambda x: x in keys)
94
+
69
- func(lambda x: x in dic.keys())
95
+ func2(lambda x: x in dic.keys())
70
96
 
71
97
  ```
98
+
99
+ ※hayataka2049さんの回答より、dic.keys()を事前に計算する方式を追加。ついでに測定回数を100回にし、平均と標準偏差を出した。
72
100
 
73
101
 
74
102
 
@@ -94,13 +122,13 @@
94
122
 
95
123
  ####測定結果
96
124
 
97
- |バージョン|#1|#2|
125
+ |バージョン|#1(毎回keys())|#1(固定keys)|#2|
98
126
 
99
- |:--|:--:|--:|
127
+ |:--|:--:|:--:|:--:|
100
128
 
101
- |2.7.16|(計測断念)|0.166|
129
+ |2.7.16|(計測断念)|(計測断念)|0.166±0.005|
102
130
 
103
- |3.7.3|0.193|0.156|
131
+ |3.7.3|0.1888±0.005|0.150±0.005|0.147±0.004|
104
132
 
105
133
 
106
134
 
@@ -108,7 +136,7 @@
108
136
 
109
137
  単位: 秒
110
138
 
111
- 測定回数: 1
139
+ 測定回数: 100
112
140
 
113
141
 
114
142
 

1

Python実装を書き忘れたので項目追加

2019/12/24 06:06

投稿

dameo
dameo

スコア943

test CHANGED
File without changes
test CHANGED
@@ -104,6 +104,8 @@
104
104
 
105
105
 
106
106
 
107
+ Python実装: CPython
108
+
107
109
  単位: 秒
108
110
 
109
111
  測定回数: 1