質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

330閲覧

for文で更新した値をリストに追加していきたいが、リストの中身がすべて最終の値になってしまう。

odadadada

総合スコア4

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/01/26 04:07

前提・実現したいこと

Pythonで降下勾配法を実装しようとしています。学習過程を描画するために学習途中のxをリストとしてほしいです。

発生している問題

リストの中身がすべて100回学習を終えたxの値になってしまっています。

該当のソースコード

Python

1 2・・・省略・・・ 3 4#fは配列xを引数とし、数値を返す関数 5 6def gradient_descent(f, x_init,lr=0.01, step_num=100): 7 x=x_init 8 x_list=[] 9 # 繰り返し試行 10 for i in range(step_num): 11 # 勾配を計算 12 grad = numerical_gradient(f, x) 13 print(x) 14 x_list.append(x) 15 x -= lr * grad 16 17 18 return x,x_list 19 20a,b=gradient_descent(f, x_init) 21print(b)

試したこと

for文の中にprint(x)を入れて確認してみたところ私が欲しい結果が得られていました。
つまり、
[x]
[(1回更新したx)]
[(2回更新したx)]



[(100回更新したx)]
のように表示されました。

補足情報(FW/ツールのバージョンなど)

Atom

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

なぜ list 'y' を変更すると list 'x' も変更されるのですか?に書かれている問題です。

python

1 x_list.append(x)

python

1 x_list.append(x.copy())

に変更しましょう。

投稿2022/01/26 04:15

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

odadadada

2022/01/26 05:18

解決しました。URLまでつけていただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問