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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

561閲覧

python3でのエラーを解決したい

kanakana3009

総合スコア6

Jupyter

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

Python 3.x

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

0グッド

0クリップ

投稿2020/01/05 16:03

python3でのエラーを解決したい

プログラミングの初心者です。
python ジュピターノートで2つの変数(x、t)を入力した時の式(f)の散布図を作ろうとしています。
まず変数のデータをエクセルなどから引用したかったのですが、わからなかったためデータは一旦すべて入力しました。そしてでたエラーが以下になります。

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

TypeError

1<ipython-input-13-40fd25212c64> in <module> 2 210 94027940211.28816, 3 211 114679467149.96948] 4--> 212 f=math.sqrt((t*16*math.pi*x)/math.sqrt(1-4*4**2/x**2)) 5 213 6 214 plt.scatter (f) 7 8TypeError: can't multiply sequence by non-int of type 'float' 9

該当のソースコード

python3

1

import matplotlib.pyplot as plt
import math

t=[1.8034228206761722e+29,1.8547811900706035e+29,
1.934825598995233e+29,
1.9036384252132672e+29,...]
x=[13.049264416595374,
19.650667671258677,
25.8489335592693,...]

f=math.sqrt((t16math.pix)/math.sqrt(1-442/x2))

plt.scatter (f)

試したこと

... の部分は長いので省略しています。
エラーコードを調べなんとかしようとしましたがよく分かりませんでした。
ご教授いただきたいです。散布図もxとyだけの散布図ならばかけるのですが、今回の場合xとtを横軸 縦軸に持っていき、fの散布図を描きたいので、そのコードの書き方も合わせて教えていただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

fを求める式の一部であるmath.pi*tの時点で同じエラーが出ます。
リストに対してはint型の数字しか掛けられないという制限があった気がします。

私の想定が質問者さんと異なっていれば恐縮ですが、fが1次元のリストであるとすれば、f以下のコードで求められると思います。

Python

1f = [] 2 3for i in range(len(x)): 4 f.append(math.sqrt((t[i]*16*math.pi*x[i])/math.sqrt(1-4*4**2/x[i]**2)))

投稿2020/01/05 16:43

編集2020/01/05 17:02
frederick_1974

総合スコア303

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

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

kanakana3009

2020/01/05 16:45

何故でしょうか?どのようにすればよいのでしょうか…。
frederick_1974

2020/01/05 16:54

回答を追記しましたが、リストにはint型しか掛けられなかったと思います。 例えば、t*3は算出されますが、t*3.0はエラーになります。
frederick_1974

2020/01/05 17:05

質問者さんの想定されているfがどういうものなのか分からなかったのですが、xとtのリストから一つずつ取り出して、fの1次元のリストを作るのであれば、追記したコードで求められると思います。
kanakana3009

2020/01/05 17:09

ありがとうございます!!とりあえず出力はできました。(後で意味をちゃんと調べます。) 散布図の書き方も御教授出来ますでしょうか…?
frederick_1974

2020/01/05 17:21

3次元のプロットはしたことがないので、他のサイトをかなり参考にしてみたのですが、 import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x,t,f) plt.show() でプロットできると思います。
kanakana3009

2020/01/05 17:22

とりあえず plt.plot(f) plt.show() f とだけ入力したところグラフは得られましたが軸が何になっているのか謎です。
frederick_1974

2020/01/05 17:28

import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.set_xlabel("x") ax.set_ylabel("t") ax.set_zlabel("f") ax.scatter(x,t,f) plt.show() とすると、軸にラベルが付くようですね。
kanakana3009

2020/01/05 17:34

ありがとうございます!!目盛りをログスケールにしたいのですが、分かりますでしょうか?
kanakana3009

2020/01/05 18:08

そうなのですね。ありがとうございます。
kanakana3009

2020/01/05 18:15

すみません、最初に戻るのですが、fにはxだけではなくtの値も入れたいのですが、書いていただいたコードだとxのみのデータになっていますか?
frederick_1974

2020/01/05 18:19

(t[i]*16*math.pi*x[i])のところで入っています。 念のためですが、t[i]は、リストtの[i]番目を取り出しています。
kanakana3009

2020/01/05 18:22

失礼いたしました。本当にありがとうございます!!
frederick_1974

2020/01/05 18:27

最後のところまではお役に立てずに申し訳ありません。 数式については、念のため1つ2つ検算していただいて、おかしなところがあれば数式の方を修正いただければと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問