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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1416閲覧

TypeErrorエラーを修正することができません!

退会済みユーザー

退会済みユーザー

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/13 07:47

編集2021/09/13 11:15

発生している問題・エラーメッセージ

<ipython-input-8-47a407e0b23b>:13: RuntimeWarning: overflow encountered in double_scalars return np.array([10 * x - 6 * y + 6, -6 * x + 6 * y - 6]) TypeError Traceback (most recent call last) <ipython-input-8-47a407e0b23b> in <module> 33 ax[ i ].set_xlim((xmin, xmax)) 34 ax[ i ].set_ylim((ymin, ymax)) ---> 35 ax[ i ].set_title("alpha={}".format(alpha[ i ])) 36 ax[ i ].scatter(initial[0], initial[1], color="k", marker="o") 37 ax[ i ].plot(algos[ i ].path_[:, 0], algos[ i ].path_[:, 1], color="k", linewidth=1.5) TypeError: 'float' object is not subscriptable

該当のソースコード

Pyhon3.8

1import numpy as np 2import matplotlib.pyplot as plt 3import gd 4 5def f(xx): 6 x = xx[0] 7 y = xx[1] 8 return 5 * x**2 - 6 * x * y + 3 * y**2 + 6 * x - 6 * y 9 10def df(xx): 11 x = xx[0] 12 y = xx[1] 13 return np.array([10 * x - 6 * y + 6, -6 * x + 6 * y - 6]) 14 15xmin, xmax, ymin, ymax = -3, 3, -3, 3 16 17algos = [] 18initial = np.array([1, 1]) 19alphas = [0.1, 0.2] 20for alpha in alphas : 21 algo = gd.GradientDescent(f, df, alpha) 22 algo.solve(np.array(initial)) 23 algos.append(algo) 24 25xs = np.linspace(xmin, xmax, 300) 26ys = np.linspace(ymin, ymax, 300) 27xmesh, ymesh = np.meshgrid(xs, ys) 28xx = np.r_[xmesh.reshape(1, -1), ymesh.reshape(1, -1)] 29fig, ax = plt.subplots(1, 2) 30levels = [-3, -2.9, -2.8, -2.6, -2.4, -2.2, -2, -1, 0, 1, 2, 3, 4] 31 32for i in range(2) : 33 ax[ i ].set_xlim((xmin, xmax)) 34 ax[ i ].set_ylim((ymin, ymax)) 35 ax[ i ].set_title("alpha={}".format(alpha[ i ])) 36 ax[ i ].scatter(initial[0], initial[1], color="k", marker="o") 37 ax[ i ].plot(algos[ i ].path_[:, 0], algos[ i ].path_[:, 1], color="k", linewidth=1.5) 38 ax[ i ].contour(xs, ys, f(xx).reshape(xmesh.shape), levels=levels, colors="k", linestyles="dotted") 39plt.show()
gdファイル import numpy as np class GradientDescent : def __init__(self, f, df, alpha=0.01, eps=1e-6) : self.f = f self.df = df self.alpha = alpha self.eps = eps self.path = None def solve(self, init): x = init path = [] grad = self.df(x) path.append(x) while (grad**2).sum() > self.eps**2: x = x - self.alpha * grad grad = self.df(x) path.append(x) self.path_ = np.array(path) self.x_ = x self.opt_ = self.f(x)

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

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

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

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

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

guest

回答1

0

ベストアンサー

---> 35 ax[ i ].set_title("alpha={}".format(alpha[ i ]))

alpha[ i ]ではなくalphas[ i ]ではありませんか?

投稿2021/09/13 11:25

meg_

総合スコア10579

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

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

退会済みユーザー

退会済みユーザー

2021/09/13 12:25

教本にはalpha[ i ]と書かれていましたが、alphas[ i ]に変更すると正しく表示されました。 ありがとうございます。 ちなみに、RuntimeWarningが表示されるのは問題ないのでしょうか?
meg_

2021/09/13 12:31

> RuntimeWarning: overflow encountered in double_scalars 数値が大きすぎてオーバーフローしているのではないでしょうか?問題になるかどうかは処理次第かと思います。(結果が質問者さんの意図した通りならば問題ないかもしれません)
退会済みユーザー

退会済みユーザー

2021/09/13 12:43

そうなんですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問