我是 python 和 Spyder 的新手,我正在尝试 cythonize 一个 for 循环。我正在使用来自 anaconda navigator 的 Spyder 3.2.7,所以我只需按下绿色三角形按钮即可运行代码。
我的 pyx 文件如下所示:
import numpy as np
def saluti():
print('hello world')
def new_sum(double[:] X, double[:] beta, double[:,:] theta):
cdef int N = X.shape[0]
cdef double[:] Y = np.zeros(N)
cdef int i, j
for i in range(N):
for j in range(i):
Y[i] += beta[j] * np.exp(-theta[i, j]*(X[i] - X[j]))
return Y
虽然我的 py 文件:
import numpy as np
import pyximport
pyximport.install()
from prova_cythonn import saluti, new_sum
def old_sum (x, beta, theta):
N = x.shape[0]
y = np.zeros(N)
for i in range(N):
for j in range(i):
y[i] = y[i] + beta[j]*np.exp(-theta[i, j]*(x[i] - x[j]))
return y
... do stuff (like print(np.sum(old_sum) or print(np.sum(new_sum)) ...
仅导入“saluti”时,我没有收到任何错误,并获得了在 Ipython 控制台中打印的“hello world”消息。如果我尝试导入 new_sum 函数,我会得到 ImportError: cannot import name 'new_sum' 在我看来,问题是如果我修改并保存 pyx,则在启动 py 时不会“读取”