回答編集履歴

2

更に高速化案を提示

2019/05/23 03:19

投稿

hiro-k
hiro-k

スコア902

test CHANGED
@@ -106,4 +106,46 @@
106
106
 
107
107
  ```
108
108
 
109
+ と修正したところ、0.40384秒にまで速くなりました。更に yi[i] と zj[j] の掛け算も2回行うのはもったいないため、
110
+
111
+ ```python
112
+
113
+ p = x[a] * yi[i] * zj[j]
114
+
115
+ q = x[a + 25] * yi[i] * zj[j]
116
+
117
+ ```
118
+
119
+
120
+
121
+ ```python
122
+
123
+ yizj=yi[i]*zj[j]
124
+
125
+ p = x[a] * yizj
126
+
127
+ q = x[a + 25] * yizj
128
+
129
+ ```
130
+
131
+ とすると、0.3625秒になりました。ただしこの変更は計算の順番が変わるため、二つの結果の間には若干の計算誤差が有るかもしれません。更に、
132
+
133
+ ```python
134
+
135
+ b = b + p
136
+
137
+ c = c + q
138
+
139
+ ```
140
+
141
+
142
+
143
+ ```python
144
+
145
+ b += p
146
+
147
+ c += q
148
+
149
+ ```
150
+
109
- 修正したころ、0.40384秒にまで速くなりました。
151
+ 書くと、0.33198秒になりました。

1

更に高速な案を提示

2019/05/23 03:19

投稿

hiro-k
hiro-k

スコア902

test CHANGED
@@ -75,3 +75,35 @@
75
75
  ```
76
76
 
77
77
  とすると、手元の環境で 3.81263秒→ 0.70095秒と約5.4倍に速くなりました。
78
+
79
+
80
+
81
+ 更に、べき乗をそれぞれ別々に求めるのも時間の無駄なので、
82
+
83
+ ```python
84
+
85
+ yi=[y**i for i in range(5)]
86
+
87
+ zj=[z**j for j in range(5)]
88
+
89
+ ```
90
+
91
+
92
+
93
+ ```python
94
+
95
+ yi=[np.ones_like(y)]
96
+
97
+ for i in range (1,5):
98
+
99
+ yi.append(yi[-1]*y)
100
+
101
+ zj=[np.ones_like(z)]
102
+
103
+ for j in range (1,5):
104
+
105
+ zj.append(zj[-1]*z)
106
+
107
+ ```
108
+
109
+ と修正したところ、0.40384秒にまで速くなりました。