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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

Q&A

解決済

2回答

1327閲覧

python 行列を含む漸化式の一要素の変化を見たいです。

makok

総合スコア7

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

0グッド

0クリップ

投稿2020/11/13 08:08

編集2020/11/13 08:51

jupyter notebookにて以下のような行列を含む漸化式を組み立てたところ、漸化式の定義自体はうまくいっているようなのですが、行列の一要素を取り出してその要素の変化を見るためグラフにしようとしたところ、以下のようなエラーが出てしまいます。

具体的には初期状態はaddという行列で、それにUEという行列をかけてaddを加え続けるという漸化式です。
1×2の行列で出てきますがt番目における、その要素のうちの1行目の要素(F(t)[0])のグラフを描画したいです。

python

1add = np.array([[1,2]]).T 2UE = np.array([[1, -1],[-1, 1]]) 3 4def F(t): 5 if t == 0: 6 return add 7 8 else: 9 return np.dot(UE, F(t-1)) + add 10 11print(F(10)) 12#[[-1022] 13#[ 1025]] 14 15print(F(10)[0]) 16#[-1022] 17 18t = np.arange(0, 1000) 19plt.plot(t,F(t)[0])

return

1--------------------------------------------------------------------------- 2ValueError Traceback (most recent call last) 3<ipython-input-43-c7b4a9e0b37b> in <module> 4----> 1 plt.plot(t,F(t)[0]) 5 6<ipython-input-40-43c0249f5b44> in F(t) 7 1 def F(t): 8----> 2 if t == 0: 9 3 return add 10 4 11 5 else: 12 13ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 14 15

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

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

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

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

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

meg_

2020/11/13 08:22

> 1×2の行列で出てきますがt番目における、その要素のうちの1行目の要素(F(t)[0])を 質問文が途中ではありませんか?
makok

2020/11/13 08:52

すみません。教えてくださりありがとうございます。
guest

回答2

0

ベストアンサー

エラーの理由は、TakaiY様の回答通りで、スカラー値を入力に期待する関数Fに、ベクトル値を入力したためです。

質問者様のやりたいことを実現するには、スカラー→スカラーの関数をベクトル→ベクトルの関数に変換する、numpy.vectorizeを適用すると解決します。最後の部分を以下のように変えてください。

なお、元の関数Fはスカラー→2要素のベクトル、なので、ラムダ関数を使って最初の要素だけを取り出すような整形をすることで、スカラー→スカラーの関数にしたあとに、vectorizeを適用しています。

Python

1t = np.arange(0, 100) 2vF0 = np.vectorize(lambda x: F(x)[0]) 3plt.plot(t,vF0(t))

また、tを1000まで伸ばすと繰り返しネストがPythonの限界を超えますので、100までとしました。こちらの改善は、漸化式を使うというご質問の前提範囲を超えると思いますので、対応していません。

投稿2020/11/14 01:29

toast-uz

総合スコア3266

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

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

makok

2020/11/14 08:33

大変丁寧にありがとうございます。助かりました!
guest

0

エラーは、複数の配列で比較演算はできませんよと言っています。

python

1t = np.arange(0, 1000) 2plt.plot(t,F(t)[0])

関数Fの引数tは、定義としては整数を必要としているのに、np.arrange()でつくった配列をそのまま突っこんでいるからでしょう。

投稿2020/11/13 08:27

TakaiY

総合スコア12830

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

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

makok

2020/11/13 09:16

1刻みにするためにt = np.arange(0, 1000, 1)としましたが同じエラーが出てしまいました。配列を整数に変換するにはどのように変換したら良いでしょうか? 上記が難しい場合、配列でなく他の型で連続した整数を引数として与えるためにはどのようにしたら良いでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問