Что я делаю неправильно, когда определяю свою функцию, чтобы ошибка «numpy.ndarray» не вызывалась? - PullRequest
1 голос
/ 16 октября 2019

Это мой код:

def lsf2(x,y): 
   N = 100
   A = (sum(x)*sum(y))/(sum(x)*(1-n))
   B = (sum(y)-N*A)/sum(x)
   delta = N*(sum(x**2)*sum(y))- sum(x)*sum(x*y)
   sigy = (sum(y-A-B*x)**2/(N-2))**0.5
   siga = sigy(sum(x)**2)/delta
   sigb = sigy*(N/delta)**0.5

  return A, B, sigy, siga, sigb 

A, B, sigy, siga, sigb = lsf2(xdata, ydata)


print(A, B, sigy, siga, sigb)

Я получаю следующую ошибку:

----> 7 siga = sigy (sum (x) ** 2) / delta

Ошибка типа: объект 'numpy.ndarray' не может быть вызван

Ответы [ 3 ]

1 голос
/ 16 октября 2019

Ошибка говорит вам, что вы пытаетесь вызвать функцию с sigy(...), но sigy - это массив, а не функция. Исходя из строки, следующей за строкой с ошибкой, я думаю, что вам не хватает *:

siga = sigy*(sum(x)**2)/delta
           ^ here

В математике мы можем написать что-то вроде x(a+b), и мы предполагаем, что значение x умножается на результат в скобках. В Python этот же синтаксис означает передачу значения в скобках функции с именем x. Вы не можете опустить оператор умножения в программе Python.

1 голос
/ 16 октября 2019

У вас есть:

sigy = (sum(y-A-B*x)**2/(N-2))**0.5
siga = sigy(sum(x)**2)/delta

sigy - это пустой массив. Когда вы набираете sigy(sum(x)**2)/delta, вы пытаетесь передать sum(x)**2 в качестве ввода, как если бы sigy была функцией , но это не так.

Может быть, вам нужно:

siga = sigy*(sum(x)**2)/delta # multiplication

или

siga = sigy**(sum(x)**2)/delta # power
0 голосов
/ 16 октября 2019

sigy является массивом numpy, а не функцией. В строке siga = sigy(sum(x)**2)/delta sigy() пытается вызвать функцию с именем sigy и аргументом sum(x)**2. Если вы пытаетесь индексировать sigy, вам нужно использовать [] как sigy[index].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...