Как исправить ошибку типа: неподдерживаемые типы операндов для : ‘int’ и ‘list’

#python

#python

Вопрос:

Здравствуйте, я устанавливаю код для rmse, но это ошибка

 import numpy as np

import matplotlib.pyplot as plt

import random

data=[[235,591],[216,539],[148,413],[35,310],[85,308],[204,519],[49,325],[25,332],[173,498],[191,498],[134,392],[99,334],[117,385],[112,387],[162,425],[272,659],[159,400],[159,427],[59,319],[198,522]]

x_data=[x_row[0] for x_row in data]

y_data=[y_row[1] for y_row in data]

a=np.random.randint(0,10)

b=np.random.randint(0,100)

def f(x):
    return b a*x

def E(x,y):
    return 0.5*np.sum((y-f(x))**2)

n=1e-3

D=1

count=0

error=E(x_data,y_data)


while D>1e-2:

    tmp0=b-n*np.sum((f(x_data)-y_data))
    tmp1=a-n*np.sum((f(x_data)-y_data)*x_data)
    b=tmp0
    a=tmp1
    current_error=E(x_data,y_data)
    D=error-current_error
    count=count 1
    if count % 100 == 0 :
        print(count,a,b,current_error,D)
 

ошибка

 Traceback (most recent call last):
    return b a*x
TypeError: unsupported operand type(s) for  : 'int' and 'list'
 

Комментарии:

1. x является a list , вы не можете использовать его в вычислении с int s — что вы пытаетесь с ним сделать?

2. Вы пытаетесь умножить и суммировать список и целое число … Вы не можете умножать списки… Итак, можете ли вы объяснить, что вы пытаетесь сделать?

Ответ №1:

Проблема заключается в

 def f(x):
    return b a*x
 

В этом контексте a и b интерпретируются как целые числа, в то время x как интерпретируются как список.

Если вы намерены применить вычисление к каждому элементу x , попробуйте что-то вроде этого:

 def f(x):    
    out = [] 
    for i in x:
        out.append(b a*i)
    return out
 

У вас будут аналогичные ошибки при попытке выполнить дополнительные вычисления позже, когда вы используете списки в вычислениях. Вам придется внести аналогичные изменения.

Например:

 def E(x,y):
    return 0.5*np.sum((y-f(x))**2)
 

Необходимо будет изменить на что-то вроде:

 def E(x,y):
    out = [] 
    for xi, yi in zip(y, f(x)):
        out.append(0.5*np.sum((yi-xi**2)))
    return out
 

Чтобы избежать TypeError: unsupported operand type(s) for -: 'list' and 'list'