回答編集履歴

1

追記

2018/10/09 08:46

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -95,3 +95,81 @@
95
95
 
96
96
 
97
97
  単純な代入はたぶんpythonで一番速い処理なので、気にする必要はないです。スライスとnp.count_nonzeroが相対的に遅いので埋もれるということです。
98
+
99
+
100
+
101
+ ### 追記
102
+
103
+ 一応代入の有無による違いを確認しておきます。
104
+
105
+
106
+
107
+ passするだけの関数と、ローカル変数に代入して参照するだけの関数を動かします。
108
+
109
+
110
+
111
+ ```python
112
+
113
+ import timeit
114
+
115
+
116
+
117
+ import numpy as np
118
+
119
+ from scipy import stats
120
+
121
+
122
+
123
+ def f1():
124
+
125
+ pass
126
+
127
+
128
+
129
+ def f2():
130
+
131
+ x = None
132
+
133
+ x
134
+
135
+
136
+
137
+ a = []
138
+
139
+ b = []
140
+
141
+ for i in range(20):
142
+
143
+ a.append(timeit.timeit(f1))
144
+
145
+ b.append(timeit.timeit(f2))
146
+
147
+
148
+
149
+ print(np.mean(a), np.mean(b))
150
+
151
+ print(stats.ttest_ind(a, b, equal_var = False))
152
+
153
+
154
+
155
+ """ 無駄に検定=>
156
+
157
+ 0.08295731854450424 0.09186851899430622
158
+
159
+ Ttest_indResult(statistic=-2.9737127732440825, pvalue=0.005209074456296565)
160
+
161
+ """
162
+
163
+ ```
164
+
165
+
166
+
167
+ 検定すれば確かに有意差はあるんですが、timeit.timeitはデフォルトで10^6回回して所要時間を測ります。
168
+
169
+
170
+
171
+ ということは、一回の代入&参照によって生じている差はわずか約9*10^-9[sec]。たった10ナノ秒弱の違いです。
172
+
173
+
174
+
175
+ やっぱり、気にする必要はないです。