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

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

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

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

Q&A

解決済

1回答

2067閲覧

グラフの作り方がわかりません。

Y-Okabe

総合スコア7

Python

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

0グッド

0クリップ

投稿2018/01/30 08:15

編集2018/01/30 08:32

前提・実現したいこと

以下のコードのグラフを作成したいのですが、求めたい値の最終値しかプロットされず作りたいグラフとは異なったものが出てきてしまいます。
2と5に収束していく2本の折れ線グラフにしたいです。

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

該当のソースコード

python

1import numpy as np 2import pandas as pd 3import matplotlib.pyplot as plt 4 5 6def update(P, C, R, x_hat, obs, I): 7 8 G = P * C / (C.T * P * C + R) 9 x_hat = x_hat + G * (obs - C.T * x_hat) 10 P = (I - G * C.T) * P 11 return x_hat, P 12 13a = 2. 14b = 5. 15 16x = np.random.uniform(-5, 5, 100) 17v = np.random.normal(0, 2, 100) 18y = [] 19for i in range(100): 20 y.append(a * x[i] + b + v[i]) 21 22A = np.mat([1]) 23P = np.mat([[1, 0], [0, 1]]) 24R = np.mat([1]) 25I = np.identity(2) 26x_hat = np.mat([[0], [0]]) 27 28 29for i in range(100): 30 C = np.mat([[x[i]], [1]]) 31 obs = np.mat([y[i]]) 32 x_hat, P = update(P, C, R, x_hat, obs, I) 33

試したこと

plt.plot(x_hat)
plt.show()

などいろいろ試したのですができませんでした。。。

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

https://qiita.com/yakawa/items/df51ce7c6bc24bc7aa6e

↑このサイトの時間依存していないほうのグラフを出したいです。

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

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

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

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

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

fuzzball

2018/01/30 08:20

「できません」ではなく、現状どうなっているのかを書いて下さい。
guest

回答1

0

ベストアンサー

値を取っておいて、プロットするのはいかがですか。

python

1ans = [] 2for i in range(100): 3 C = np.mat([[x[i]], [1]]) 4 obs = np.mat([y[i]]) 5 x_hat, P = update(P, C, R, x_hat, obs, I) 6 ans.append(x_hat) 7As = [v[0] for v in ans] 8Bs = [v[1] for v in ans] 9Xs = list(range(len(As))) 10plt.plot(Xs, As) 11plt.plot(Xs, Bs) 12plt.show()

投稿2018/01/30 09:03

mkgrei

総合スコア8560

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

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

Y-Okabe

2018/01/31 04:40

回答ありがとうございました。 import numpy as np import pandas as pd import matplotlib.pyplot as plt def update(P, C, R, x_hat, obs, I): G = P * C / (C.T * P * C + R) x_hat = x_hat + G * (obs - C.T * x_hat) P = (I - G * C.T) * P return x_hat, P a = 2. b = 5. x = np.random.uniform(-5, 5, 100) v = np.random.normal(0, 2, 100) y = [] for i in range(100): y.append(a * x[i] + b + v[i]) A = np.mat([1]) P = np.mat([[1, 0], [0, 1]]) R = np.mat([1]) I = np.identity(2) x_hat = np.mat([[0], [0]]) ans = [] for i in range(100): C = np.mat([[x[i]], [1]]) obs = np.mat([y[i]]) x_hat, P = update(P, C, R, x_hat, obs, I) ans.append(x_hat) As = [v[0] for v in ans] Bs = [v[1] for v in ans] Xs = list(range(len(As))) plt.plot(Xs, As) plt.plot(Xs, Bs) plt.show() 以上のコードで動かしてみたのですが、以下のエラーが出てしまいます。 Traceback (most recent call last): File "KLM.py", line 37, in <module> plt.plot(Xs, As) File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\pyplot.py", line 3240, in plot ret = ax.plot(*args, **kwargs) File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\__init__.py", line 1710, in inner return func(ax, *args, **kwargs) File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\axes\_axes.py", line 1437, in plot for line in self._get_lines(*args, **kwargs): File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\axes\_base.py", line 404, in _grab_next_args for seg in self._plot_args(this, kwargs): File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\axes\_base.py", line 384, in _plot_args x, y = self._xy_from_xy(x, y) File "C:\ProgramData\Anaconda2\lib\site-packages\matplotlib\axes\_base.py", line 246, in _xy_from_xy "shapes {} and {}".format(x.shape, y.shape)) ValueError: x and y can be no greater than 2-D, but have shapes (100,) and (100, 1, 1) コードの組み合わせ方が違いますか?色々試したりコードの意味を理解したりしている段階ですが、ご助力いただけると幸いです。
mkgrei

2018/01/31 06:47

x_hatのネストが問題です。 一番手っ取り早いのは As = np.array([v[0] for v in ans]).ravel() Bs = np.array([v[1] for v in ans]).ravel() でしょうか。
Y-Okabe

2018/01/31 06:58

返信ありがとうございます。 実行してみたところ求めたいグラフを出すことができました。 本当にありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問