Я реализовал все oop в 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