我的Cython代码与Python的交互太多

我的Cython代码与Python的交互太多,python,c,arrays,cython,Python,C,Arrays,Cython,我在Cython中实现了一个循环以加快代码的速度: 当我跑步时: $ cython loop_fun2.pyx -a 我得到以下输出: 似乎我的Cython代码几乎在每一行都与Python解释器交互。我希望删除这种交互,以加快我的代码。 我需要在我的代码中更改什么,以便它只使用C解释器运行?我怀疑这个问题与我定义数组的方式有关 编辑: 以下是有关该问题的一些补充信息: 代码如下: import cython from cython.view cimport array as cvarray

我在Cython中实现了一个循环以加快代码的速度:

当我跑步时:

$ cython loop_fun2.pyx -a
我得到以下输出:

似乎我的Cython代码几乎在每一行都与Python解释器交互。我希望删除这种交互,以加快我的代码。 我需要在我的代码中更改什么,以便它只使用C解释器运行?我怀疑这个问题与我定义数组的方式有关

编辑: 以下是有关该问题的一些补充信息:

代码如下:

import cython
from cython.view cimport array as cvarray
from cpython.array cimport array, clone
import numpy as np

from libc.math cimport acos, pi, sqrt


@cython.cdivision
@cython.boundscheck(False)
@cython.wraparound(False)

def fill_mat(double[:,:] K,double[:,:] K_ii,double[:,:] K_jj, int q, int 
P, int Q):
    return fill_mat1(K,K_ii,K_jj, q, P, Q)
cdef fill_mat1(double[:,:] K,double[:,:] K_ii,double[:,:] K_jj, int q, int 
P, int Q):

cdef double[:,:] sigma=cvarray(shape=(P,Q), itemsize=sizeof(double), format="d")
cdef double[:,:] sigma_ii=cvarray(shape=(P,Q), itemsize=sizeof(double), format="d")
cdef double[:,:] sigma_jj=cvarray(shape=(P,Q), itemsize=sizeof(double), format="d")
cdef double temp_K
cdef double temp_K_ii
cdef double temp_K_jj

for i1 in range(P):
    for i2 in range(Q):
        temp_K = 0.0
        temp_K_ii = 0.0
        temp_K_jj = 0.0
        for i in range(0,q):
            for j in range(0,q):
                temp_K = temp_K + K[i1+i,i2+j]
                temp_K_ii = temp_K_ii + K_ii[i1+i,i2+j]
                temp_K_jj = temp_K_jj + K_jj[i1+i,i2+j]

        sigma[i1,i2] = temp_K
        sigma_ii[i1,i2] = temp_K_ii
        sigma_jj[i1,i2] = temp_K_jj

return sigma, sigma_ii, sigma_jj

您可以单击“+”以更详细地了解Python交互的原因。一件显而易见的事情:i1、i2、i、j是Python整数,而不是
cdef int
变量。请阅读下面的内容。问题的一个特殊流程是使用图片链接,而不是其中包含的文本。请回答您的问题,然后插入实际文本。为了澄清@UlrichEckhardt所说的内容,在本例中,图片很有用,因为它显示了一些自动高亮显示的“低效”代码位。但是,您还应该包括实际的文本。您应该首先定义
cdef i1、i2、i、j
,然后才在循环中使用它们,否则这些变量就是Python对象。如果您执行上述操作,什么会保持黄色?