🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

Q&A

解決済

1回答

3890閲覧

ufunc 'multiply' did not contain a loop with signature matching types dtype('<U106') dtype('<U106')

noguch

総合スコア7

Python 3.x

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

0グッド

0クリップ

投稿2019/10/05 16:42

エラーが出ます

curve_fit()を使って、定義した式中の最適化された a と T の値を求めようとしています。

以下のコードの curve_fit() を使用している行でエラーが出ます。

import numpy as np import scipy.optimize as optimize from numpy import exp as exp from numpy import pi as pi h = 6.62606876 * 10 ** -34 c = 299792458.0 k = 1.3806503 * 10 ** -23 parameter_initial = np.array([0,2000]) def func(x, a, T): return (10**-7)*a*2.0*pi*h*c**2/(((x*10**(-9))**5)*(exp((h*c)/((x*10**(-9))*k*T))-1.0)) data = np.loadtxt('test.txt') data_x = data[:, 0] data_y = data[:, 1] parameter_aT, parameter = optimize.curve_fit(func, data_x, data_y, p0 = parameter_initial) y = func(data_x, parameter_aT[0], parameter_aT[1])

test.txt

test.txtの中身(一部)は以下の通りです。n行2列でスペース区切りです。

4.395183066999999824e+02 3.215451790192022652e-02
4.449402655000000095e+02 3.108482251934293131e-02
4.457118290000000229e+02 3.092934433430016145e-02
4.526744095000000243e+02 2.946349906940348706e-02
4.542168293999999946e+02 2.922468844170659358e-02
4.549980049000000122e+02 2.905573990407350066e-02
4.557691323999999895e+02 2.893623722803133000e-02
4.588533180000000016e+02 2.824795956014531165e-02
4.627178395000000251e+02 2.763898558200103897e-02
4.642594219000000635e+02 5.844604162699411354e-02
4.650301661999999965e+02 5.828256719299678562e-02
4.673422128000000271e+02 2.689456581147890712e-02
4.681228412999999478e+02 2.675835103135611182e-02
4.696639899000000469e+02 2.653039457989943631e-02
...

エラー内容

ufunc 'multiply' did not contain a loop with signature matching types dtype('<U106') dtype('<U106') dtype('<U106')

調べて分かったこと

参考サイト
定義した式に渡す値のデータ型を、明確に指定すれば良さそう・・・

コード修正

import numpy as np import scipy.optimize as optimize from numpy import exp as exp from numpy import pi as pi h = 6.62606876 * 10 ** -34 c = 299792458.0 k = 1.3806503 * 10 ** -23 # ↓追加 parameter_initial = np.array([0,2000], dtype = 'float') def func(x, a, T): return (10**-7)*a*2.0*pi*h*c**2/(((x*10**(-9))**5)*(exp((h*c)/((x*10**(-9))*k*T))-1.0)) # ↓追加 data = np.loadtxt('test.txt', dtype = 'float') data_x = data[:, 0] data_y = data[:, 1] parameter_aT, parameter = optimize.curve_fit(func, data_x, data_y, p0 = parameter_initial) y = func(data_x, parameter_aT[0], parameter_aT[1])

エラー内容
同じエラー内容が出ます。

ufunc 'multiply' did not contain a loop with signature matching types dtype('<U106') dtype('<U106') dtype('<U106')

どのようにコードを修正したらいいか教えてほしいです。よろしくお願いします。

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

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

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

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

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

meg_

2019/10/06 01:59

デフォルトで「float」なので一緒ですね。 エラーコードを載せた方が回答がつきやすくなると思います。
meg_

2019/10/06 02:53

提示されたデータの一部でコードを試したところ、下記Warningが出ました。 「OptimizeWarning: Covariance of the parameters could not be estimated category=OptimizeWarning)」 パラメーターの設定が悪いのでしょうか?? これ以上分かりませんでした。
noguch

2019/10/06 06:41

回答ありがとうございます! 色々試したところ、解決できました。 ありがとうございました。
guest

回答1

0

自己解決

PCを再起動して、再度同じプログラムを実行したところ、エラー内容がRuntimeErrorに変わりました。
curve_fit内の引数に、maxfev = 10000 を追加したところ、エラーが出なくなりました。

投稿2019/10/06 06:53

noguch

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問