gpt4 book ai didi

python - 值错误 : ndarray is not C-contiguous in cython

转载 作者:太空狗 更新时间:2023-10-29 18:20:21 27 4
gpt4 key购买 nike

我在 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

我不太明白为什么会出现这个问题??!!!我将不胜感激获得任何有用的提示。

最佳答案

就在您收到错误之前,尝试打印您传递给 likelihood 的 numpy 数组的 flags 属性。您可能会看到如下内容:

In [2]: foo.flags
Out[2]:
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False

请注意它说 C_CONTIGUOUS : False 的地方,因为这就是问题所在。要修复它,只需将其转换为 C 顺序:

In [6]: foo = foo.copy(order='C')

In [7]: foo.flags
Out[7]:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False

关于python - 值错误 : ndarray is not C-contiguous in cython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26778079/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com