TypeError: только массивы длины 1 могут быть преобразованы в скаляры Python при чтении файла и при попытке построить значения - PullRequest
0 голосов
/ 26 декабря 2018

загрузка данных из файла

my_data=pd.read_excel('DailyVanSale.xlsx',delimiter=',')

преобразование в матричный формат

data=my_data.as_matrix()
productid=data[:10,1]

преобразование в тип с плавающей запятой

productid.astype('float')
sales=data[:10,7]
sales.astype('float')
print(type(sales))
print(type(productid))

Корреляция и регрессия

func=lambda m,x,c:float(m)*float(x)+float(c)
vf=sp.vectorize(func)
popt,pcov=spo.curve_fit(func,productid,sales)

Печать

yc=vf(popt[0],productid,popt[1])

Метка на графике

plt.plot(productid,sales,'r:o',label='observed')
plt.plot(productid,yc,'b-v',label='calculated')

легенда на графике

plt.legend(loc='best')
plt.show()

Журнал ошибок:

Traceback (most recent call last):
  File "project.py", line 18, in <module>
    popt,pcov=spo.curve_fit(func,productid,sales)
  File "/opt/anaconda2/lib/python2.7/site-packages/scipy/optimize/minpack.py", line 751, in curve_fit
    res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)
  File "/opt/anaconda2/lib/python2.7/site-packages/scipy/optimize/minpack.py", line 383, in leastsq
    shape, dtype = _check_func('leastsq', 'func', func, x0, args, n)
  File "/opt/anaconda2/lib/python2.7/site-packages/scipy/optimize/minpack.py", line 27, in _check_func
    res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
  File "/opt/anaconda2/lib/python2.7/site-packages/scipy/optimize/minpack.py", line 463, in func_wrapped
    return func(xdata, *params) - ydata
  File "project.py", line 16, in <lambda>
    func=lambda m,x,c:float(m)*float(x)+float(c)
TypeError: only length-1 arrays can be converted to Python scalars

1 Ответ

0 голосов
/ 26 декабря 2018

productid.astype('float')

Это не операция на месте.На данный момент вы не применили productid к float.

sales.astype('float')

То же самое здесь.

func=lambda m,x,c:float(m)*float(x)+float(c)

TypeError: only length-1 arrays can be converted to Python scalars

Я полагаю, что хотя бы одно из значений, переданных в m, x или c, имеет более высокие измерения, чем (1, 1).

...