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

質問編集履歴

3

PyPy, Cythonでの計測結果追加

2019/12/26 21:34

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -60,17 +60,19 @@
60
60
  |CPU|AMD Ryzen 5 1400 3.2GHz|
61
61
 
62
62
  ####測定結果
63
- |バージョン|#1(毎回keys())|#1(固定keys)|#2|
63
+ |Python実装|バージョン|#1(毎回keys())|#1(固定keys)|#2|補足|
64
- |:--|:--:|:--:|:--:|
64
+ |:--|:--:|:--:|:--:|:--:|:--:|
65
- |2.7.16|(計測断念)|(計測断念)|0.166±0.005|
65
+ |CPython|2.7.16|(計測断念)|(計測断念)|0.166±0.005|-|
66
- |3.7.3|0.1888±0.005|0.150±0.005|0.147±0.004|
66
+ |CPython|3.7.3|0.1888±0.005|0.150±0.005|0.147±0.004|-|
67
+ |PyPy|2.7.13|(計測断念)|(計測断念)|0.069±0.003|docker使用|
68
+ |PyPy|3.6.9|0.084±0.004|0.074±0.005|0.070±0.004|docker使用|
69
+ |Cython|3.7.3|0.157±0.010|0.109±0.003|0.107±0.004|Jupyter Notebook使用|
67
70
 
68
- Python実装: CPython
69
71
  単位: 秒
70
72
  測定回数: 100
71
73
 
72
74
  ####考察
73
- 回数が十分ではないが、バージョンに依らず、```#2```の方法が速いように見える
75
+ バージョンに依らず、```#2```の方法が速いように見える
74
76
 
75
77
  # 質問
76
78
  dictにキーが含まれているかどうかの判定はどのようにやるのが、適切なのでしょうか?

2

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

2019/12/26 21:33

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -17,8 +17,15 @@
17
17
  ### 検証コード
18
18
  ```python
19
19
  import time
20
+ from math import sqrt
20
21
 
22
+ mean=lambda list: sum(list)/len(list)
23
+ def stdev(list):
24
+ avg = mean(list)
25
+ return sqrt(sum([(x-avg)*(x-avg) for x in list])/(len(list)-1))
26
+
21
27
  N=1000000
28
+ REP=100
22
29
  dic = {float(x):float(x) for x in range(N)}
23
30
 
24
31
  def func(f):
@@ -29,11 +36,18 @@
29
36
  end = time.time()
30
37
  if sum != N:
31
38
  raise Exception
32
- print(end - start)
39
+ return end - start
33
40
 
41
+ def func2(f):
42
+ times = [func(f) for i in range(REP)]
43
+ print(str(mean(times)) + "\t" + str(stdev(times)))
44
+
34
- func(lambda x: x in dic)
45
+ func2(lambda x: x in dic)
46
+ keys = dic.keys()
47
+ func2(lambda x: x in keys)
35
- func(lambda x: x in dic.keys())
48
+ func2(lambda x: x in dic.keys())
36
49
  ```
50
+ ※hayataka2049さんの回答より、dic.keys()を事前に計算する方式を追加。ついでに測定回数を100回にし、平均と標準偏差を出した。
37
51
 
38
52
  ### 検証結果
39
53
  ####測定環境
@@ -46,14 +60,14 @@
46
60
  |CPU|AMD Ryzen 5 1400 3.2GHz|
47
61
 
48
62
  ####測定結果
49
- |バージョン|#1|#2|
63
+ |バージョン|#1(毎回keys())|#1(固定keys)|#2|
50
- |:--|:--:|--:|
64
+ |:--|:--:|:--:|:--:|
51
- |2.7.16|(計測断念)|0.166|
65
+ |2.7.16|(計測断念)|(計測断念)|0.166±0.005|
52
- |3.7.3|0.193|0.156|
66
+ |3.7.3|0.1888±0.005|0.150±0.005|0.147±0.004|
53
67
 
54
68
  Python実装: CPython
55
69
  単位: 秒
56
- 測定回数: 1
70
+ 測定回数: 100
57
71
 
58
72
  ####考察
59
73
  回数が十分ではないが、バージョンに依らず、```#2```の方法が速いように見える

1

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

2019/12/24 06:06

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -51,6 +51,7 @@
51
51
  |2.7.16|(計測断念)|0.166|
52
52
  |3.7.3|0.193|0.156|
53
53
 
54
+ Python実装: CPython
54
55
  単位: 秒
55
56
  測定回数: 1
56
57