LoginSignup
1
0

More than 3 years have passed since last update.

[Python]ラムダ式の内部変数が保存されなくてハマった

Last updated at Posted at 2021-01-13

線形動径基底回帰をするときに、基底関数のリストとして、

bases = [lambda x: (torch.exp(-((x[..., 0] - x_mean)/std_x) ** 2 - ((x[..., 1] - dx_mean)/std_dx) ** 2))
         for x_mean in np.linspace(start=-1., stop=1., num=10)
         for dx_mean in np.linspace(start=-1., stop=1., num=10)
         ]

と書いたのだがすべて同じ関数のリストになってしまった。

シンプルな例を考える

f = [lambda x: print(i) for i in range(4)]

とすると、ラムダ文の実行時での変数$i$の値が使用され、
任意のnに対して、

f[n](10) = 3

となってしまう。

定義の時の変数値を使うためには、

f = [lambda x, s=i: print(s) for i in range(4)]

このようにデフォルト引数を使用すればよい

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0