Тип Ошибка при умножении уклона на список X - PullRequest
0 голосов
/ 03 апреля 2019

Ниже приведена проблема, с которой я сталкиваюсь:

Линейная регрессия - даны 16 пар цен (как зависимая переменная) и соответствующие требования (в качестве независимой переменной), используйте инструмент линейной регрессии для оценки наилучшего соответствия линейная линия.

Price Demand
127 3420
134 3400
136 3250
139 3410
140 3190
141 3250
148 2860
149 2830 
151 3160
154 2820
155 2780
157 2900
159 2810
167 2580
168 2520
171 2430

Вот мой код:

from pylab import *
from numpy import *
from scipy.stats import *


x = [3420, 3400, 3250, 3410, 3190, 3250, 2860, 2830, 3160, 2820, 2780, 2900, 2810, 2580, 2520, 2430]
    np.asarray(x,dtype= np.float64)

y = [127, 134, 136 ,139, 140, 141, 148, 149, 151, 154, 155, 157, 159, 167, 168, 171]
np.asarray(y, dtype= np.float64)

slope,intercept,r_value,p_value,slope_std_error = stats.linregress(x,y)

y_modeled = x*slope+intercept

plot(x,y,'ob',markersize=2)
plot(x,y_modeled,'-r',linewidth=1)
show() 

Вот ошибка, которую я получаю:

Traceback (most recent call last):

  File "<ipython-input-48-0a0274c24b19>", line 13, in <module>
    y_modeled = x*slope+intercept

TypeError: can't multiply sequence by non-int of type 'numpy.float64'

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Во-первых, [i * slope + intercept for i in x] - это понимание списка, где вы будете умножать каждое число в списке «x» на наклон и добавлять к нему перехват.Затем вы передадите новые значения списка "x" в np.asarray (), чтобы преобразовать список в массив numpy.

Y_modeled=np.asarray([i*slope+intercept for i in x], dtype=np.float64)
1 голос
/ 03 апреля 2019

Вы не конвертировали списки Python в numy массивы здесь:

x = [3420, 3400, 3250, 3410, 3190, 3250, 2860, 2830, 3160, 2820, 2780, 2900, 2810, 2580, 2520, 2430]
np.asarray(x,dtype= np.float64)

np.asarray возвращает пустой массив, но не изменяет оригинал. Вы можете сделать это вместо:

x = [3420, 3400, 3250, 3410, 3190, 3250, 2860, 2830, 3160, 2820, 2780, 2900, 2810, 2580, 2520, 2430]
x = np.asarray(x, dtype=np.float64)

Существует большая разница в том, как работает умножение массива по сравнению с умножением списка Python. Смотрите здесь:

>>> 3 * np.array([1, 2, 3])
array([3, 6, 9])

>>> 3 * [1, 2, 3]
[1, 2, 3, 1, 2, 3, 1, 2, 3]

В вашем случае вы пытались выполнить последнее (умножение списка), но вы умножили на число с плавающей запятой, которое не может работать, и именно об этом говорится в ошибке.

...