Моделирование плотности ядра на питоне - PullRequest
0 голосов
/ 10 ноября 2018

Я хочу смоделировать Плотность ядра на питоне,

но я получаю следующую ошибку: Ошибка типа: объект 'numpy.ndarray' не может быть вызван

Это код:

from matplotlib.pyplot import *
from math import *
from array import *
from import numpy  *
from numpy.random import *
from scipy.misc import *
from scipy.stats import *
from scipy import *
from random import *

N=30
sigma=1
T=linspace(1,N,N)
n=30
X=np.random.normal(0, sigma, 1000)
x=1
alpha=0.45

def k_gaussien(x,sigma): #kernel gaussien
    if(sigma<=0):
        return((1/(sigma*sqrt(2*pi)))*exp(-(x**2/(2*sigma**2))))

def h(n,alpha): #bandwith
    h=ones((1,1))
    for i in range(2,N):
        h[i]= h[i-1] + (i**(-alpha))

def f_PR(x,X,alpha,sigma): #Parzen-Rosenblatt estimator (f_PR)
    global F;
    F = zeros((N,0));
    for k in range(2,N):
        for i in  range(1,k):
            F[k] = F[k-1] + k_gaussien((x-X(i))*(i**alpha));
        F[k] = F[k-1] *(1/(h(n,alpha)));
    print(F);

# almost surely convergency
fPR=f_PR(x,X,alpha,sigma)
plot(T,fPR,lw=3)
plot(T,(1/sqrt(2*pi))*exp ((-1/2)*(x*x))*linspace(1,1,N,),'r--')

1 Ответ

0 голосов
/ 10 ноября 2018

Ты совсем близко.Обычно, когда вы получаете сообщение о том, что что-то не вызывается, это означает, что вы используете парантез, где вам следует использовать что-то другое, или вы поменяли имена некоторых переменных.

Если вы запустите свой код, обратная трассировка покажетВы считаете, что ошибка в следующей строке:

F[k] = F[k-1] + k_gaussien((x-X(i))*(i**alpha));

Можете ли вы определить ошибку сейчас?Переменная X имеет тип numpy.ndarray, который на самом деле не вызывается.То, что вы хотите, это X[i], вероятно.

Небольшое стилистическое замечание: в python вам не нужны ; s.

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