Tôi đã viết các chức năng sau đây trong cython
để ước tính logaValueError: ndarray không phải là C tiếp giáp trong cython
@cython.boundscheck(False)
@cython.wraparound(False)
def likelihood(double m,
double c,
np.ndarray[np.double_t, ndim=1, mode='c'] r_mpc not None,
np.ndarray[np.double_t, ndim=1, mode='c'] gtan not None,
np.ndarray[np.double_t, ndim=1, mode='c'] gcrs not None,
np.ndarray[np.double_t, ndim=1, mode='c'] shear_err not None,
np.ndarray[np.double_t, ndim=1, mode='c'] beta not None,
double rho_c,
np.ndarray[np.double_t, ndim=1, mode='c'] rho_c_sigma not None):
cdef double rscale = rscaleConstM(m, c,rho_c, 200)
cdef Py_ssize_t ngals = r_mpc.shape[0]
cdef np.ndarray[DTYPE_T, ndim=1, mode='c'] gamma_inf = Sh(r_mpc, c, rscale, rho_c_sigma)
cdef np.ndarray[DTYPE_T, ndim=1, mode='c'] kappa_inf = Kap(r_mpc, c, rscale, rho_c_sigma)
cdef double delta = 0.
cdef double modelg = 0.
cdef double modsig = 0.
cdef Py_ssize_t i
cdef DTYPE_T logProb = 0.
#calculate logprob
for i from ngals > i >= 0:
modelg = (beta[i]*gamma_inf[i]/(1 - beta[i]*kappa_inf[i]))
delta = gtan[i] - modelg
modsig = shear_err[i]
logProb = logProb -.5*(delta/modsig)**2 - logsqrt2pi - log(modsig)
return logProb
nhưng khi tôi chạy phiên bản biên dịch của chức năng này, tôi nhận được thông báo lỗi sau:
File "Tools.pyx", line 3, in Tools.likelihood
def likelihood(double m,
ValueError: ndarray is not C-contiguous
Tôi không thể hiểu tại sao vấn đề này xảy ra ?? !!! Tôi sẽ đánh giá cao để có được bất kỳ lời khuyên hữu ích.
Có phải là nguồn đầy đủ không? Có thể thêm 'cimport numpy as np' sẽ giúp bạn? –
@ S.Kozlov ofcourse nó không phải là! Đó là một đoạn mã dài và tôi đã đăng một phần mã giúp tăng thông báo lỗi. – Dalek
@ S.Kozlov Thật vậy, nó nằm trên đầu mã dài. – Dalek