0

我是 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 时不会“读取”

4

0 回答 0