Векторизация функции зависит от 2 массивов в NumPy - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь векторизовать функцию, состоящую из цикла.

Исходная функция:

def error(X, Y, m, c):
    total = 0
    for i in range(20):
        total += (Y[i]-(m*X[i]+c))**2
    return total 

Я пробовал следующее, но это не работает:

def error(X, Y, m, c):
    errorVector = np.array([(y-(m*x+c))**2 for (x,y) in (X,Y)])
    total = errorVector.sum()
    return total

Как я могу векторизовать функцию?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

В дополнение к ответу @ jpp (который предполагает, что X и Y оба имеют форму (20, ...)), вот точный эквивалент вашей error функции:

def error(X, Y, m, c):
  return np.sum((Y[:20] - (m * X[:20] + c)) ** 2)
0 голосов
/ 26 апреля 2018

Это один из способов, предполагая, что X и Y имеют первое измерение длины 20.

def error(X, Y, m, c):
    total = 0
    for i in range(20):
        total += (Y[i]-(m*X[i]+c))**2
    return total 

def error_vec(X, Y, m, c):
    return np.sum((Y - (m*X + c))**2)

m, c = 3, 4
X = np.arange(20)
Y = np.arange(20)

assert error(X, Y, m, c) == error_vec(X, Y, m, c)
...