я написал следующую функцию в cython
для оценки журнала правдоподобияValueError: ndarray не C-смежный в 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
, но когда я запускаю скомпилированную версию этой функции, я получаю следующее сообщение об ошибке:
File "Tools.pyx", line 3, in Tools.likelihood
def likelihood(double m,
ValueError: ndarray is not C-contiguous
Я не мог понять, почему эта проблема возникает ?? !!! Буду признателен за полезные советы.
Это полный источник? Может быть добавлено 'cimport numpy as np' поможет вам? –
@ С.Козлов, конечно же, нет! Это длинный код, и я отправил часть кода, которая вызывает сообщение об ошибке. – Dalek
@ S.Kozlov Действительно, он находится на вершине длинного кода. – Dalek