2013-09-07 2 views
-2
import numpy as np 
from scipy.optimize import curve_fit 

x1 = [0.25, 0.33, 0.40, 0.50, 0.60, 0.75, 1.00] 
y1 = [1.02, 1.39, 1.67, 1.89, 2.08, 2.44, 2.50] 

def mmfunc(x1, d, e): 
    return d*x1/(e + x1) 

y2 = mmfunc(x1,6.0,1.0) 

popt, pcov = curve_fit(mmfunc, x1, y1) 

Я получаю эту ошибкуPython - curve_fit - ошибка не-INT/поплавковый

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

(x1 представляет собой массив (поплавки), г, д являются поплавки)

(я пытался считывая значения из файла, печатали значения (они являются поплавками) ... Я пробовал более простую функцию - ничего не работает!)

+3

Что неясно об исключении? –

+0

Можете ли вы поместить это в форму вопроса? – Curt

+3

Проблема в том, что «x1 - это массив (floats)», это неверно. Вместо того, чтобы просто предположить, что это то, что вы хотите, это должно быть первым, что вы проверяете. Например, 'print (type (x1))' немедленно сообщит вам, что это фактически 'builtins.list', а не' numpy.ndarray'. И поэтому вы не можете использовать операции с массивом. – abarnert

ответ

4

Проблема в том, что вы не конвертируете свои списки в массивы numpy, поэтому вы не можете добавить или умножить на скаляры. Это, кажется, работает для меня:

import numpy as np 

x1 = np.array([0.25, 0.33, 0.40, 0.50, 0.60, 0.75, 1.00], dtype="float") 
y1 = np.array([1.02, 1.39, 1.67, 1.89, 2.08, 2.44, 2.50], dtype="float") 

def mmfunc(x1, d, e): 
    return d*x1/(e + x1) 

y2 = mmfunc(x1,6.0,1.0) 

(Примечание: У меня не было scipy установлен таким образом, я не был в состоянии проверить, что функция curve_fit работает, но преобразование в np.array исправило исключение, связанное с арифметическими на списки.)

+0

спасибо - да, я проверил (так я думал) x1 и y1 ... когда я распечатал x1 - получил серию чисел (floats) ... но да, это работает - явным образом объявляю их как floats - спасибо снова ... – Krishnan

+0

Обратите внимание: это изменение заключается не в объявлении их как float, а в превращении объекта 'list' в Python в объект' numpy.array'. Это две разные вещи и не поддерживают одни и те же операции! Кроме того, если бы мой ответ был полезным, подумайте о том, чтобы он был «принят», чтобы другие знали об этом. :) –

Смежные вопросы