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

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

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

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

NumPy

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

Python

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

Q&A

1回答

391閲覧

最小二乗法を用いて直線フィッティングしようとしていますがエラーが出て困っています。

Pat-rush7

総合スコア0

Matplotlib

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

NumPy

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

Python

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

0グッド

0クリップ

投稿2021/11/10 14:36

前提・実現したいこと

最小二乗法を用いて直線フィッティングしようとしていますがエラーが出て困っています。

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

runfile('C:/Users/賢斗/Desktop/project/analysis/DAT2.py', wdir='C:/Users/賢斗/Desktop/project/analysis')
-32.42000000000001
-101.46000000000001
230.37
Traceback (most recent call last):

File "C:\Users\賢斗\Desktop\project\analysis\DAT2.py", line 42, in <module>
Sxx = (np.sum(x2*isig2))

TypeError: can't multiply sequence by non-int of type 'list'

該当のソースコード

import numpy as np
import matplotlib.pyplot as plt

def sq(list):
ret = []
for i in list:
ret.append(i**2)
return ret

def inv(list):
rrr = []
for i in list:
rrr.append(i**(-1))
return rrr

x = np.array([-4.06,3.91,-5.70,-9.76,6.90,-14.09,-13.31,4.37,5.31,-13.25,7.26])
y = np.array([-44.37,31.40,-11.56,-37.03,25.92,-56.86,-57.54,51.62,25.66,-43.26,14.56])
sig = np.array([25.19,23.98,19.81,25.35,20.72,14.31,28.80,25.27,15.18,18.39,13.37])

print(np.sum(x))
print(np.sum(y))
print(np.sum(sig))

sig2 = sq(sig)
isig2 = inv(sig2)
x2 = sq(x)

S1 = (np.sum(isig2))
Sx = (np.sum(x*(isig2)))
Sxx = (np.sum(x2isig2))
Sy = (np.sum(y
(isig2)))
Sxy = (np.sum((xy)(isig2)))

Sx2 = sq(Sx)

delta = ((S1*Sxx)-(Sx2))

idelta = inv(delta)

print(S1)
print(Sx)
print(Sxx)
print(Sy)
print(Sxy)
print(delta)

m = ((S1Sxy)-(SxSy))/idelta
c = ((SySxx)-(SxSxy))/idelta

z = sq(y-((m*x)+c))

kai = (np.sum(zisig2))
COV = -Sx
idelta

print(m)
print(c)
print(COV)
print(kai)

f = np.arange(-20,20,0.1)
d=m*f+c

plt.scatter(x,y)
plt.plot(f,d)

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

Sxx = (np.sum(x2*isig2))

の右辺に現れるx2とisig2はどちらもfloatのリストです。
リストとリストの積を出そうとすると
TypeError: can't multiply sequence by non-int of type 'list'
となります。

関数sqと関数invがリストではなくnumpy.ndarrayを返すようにすればこの問題は解決します。

投稿2021/11/10 15:25

ppaul

総合スコア24666

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問