回答編集履歴

1

改善

2021/12/06 06:11

投稿

bsdfan
bsdfan

スコア4921

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  下記でinteg_gaussian()の速度を改善できそうです。
2
2
  - func_gauss は、毎回作り直す必要はないので、関数の外で作成
3
3
  - func_gauss は ufunc になっている(はずな)ので、forは使わず、引数にarrayを渡して計算
4
- - 二重のforループをmeshgridを使うことで削除
4
+ - 二重のforループはブロードキャストを使った演算により削除
5
5
 
6
6
  一番上の、sympyの部分を関数の外に出す変更だけでも、かなり変わります。
7
7
 
@@ -32,7 +32,6 @@
32
32
  x_list = func_gauss((x_range - cen_x) / sigma)
33
33
  y_list = func_gauss((y_range - cen_y) / sigma)
34
34
  #不定積分に積分したい範囲を代入して積分値を求める
35
- y_diff, x_diff = np.meshgrid(np.diff(y_list), np.diff(x_list))
36
- np_integ = (height * x_diff * y_diff + constant).ravel()
35
+ np_integ = (height * np.diff(x_list)[:, None] * np.diff(y_list) + constant).ravel()
37
36
  return np_integ
38
37
  ```