我有一个cython函数,如下所示:
cdef void foo(int a, int b=1, int c=2):
pass
以及一个返回其地址的getter函数:
def get_foo():
return <size_t>foo
因此,我可以在某个地方获取函数foo的地址,并将其转换回Cython语言中的真正函数(例如:可以在python中使用的回调函数)。
问题是如何编写这样的类型?
我试过了:
cdef void foo(int a, int b=1, int c=2):
pass
ctypedef void (*foo_type)(int a,
我试图使用并行cython运行昂贵的功能。我想在课堂上加入一个信号。如下所示:
cdef class A(QObject):
finish=pyqtSignal(float)
def counter(self, int count): # define the type of input
# Define all variables
cdef int x = 0
cdef int i
for i in prange (count, schedule='dynamic', nogil=True)
在过去的几天里,我一直在试验Cython,对于c/ cython将字符串作为字符数组/指针处理的方式,我有一个快速的问题:
def function(char *string):
for i in xrange(len(string)):
print string[i]
print &string[i]
例如,当我使用"abc"作为参数编译和运行代码时,我得到了以下答案:
97
abc
98
bc
99
C
现在我的问题是:
为什么cython要为string[i]中的每个字符打印ascii值?
为什么cython
我有一些类在cython中实现为cdef class。在客户端python代码中,我想使用多重继承组成类,但是我得到了一个类型错误。下面是一个最小的可重现性示例:
In [1]: %load_ext cython
In [2]: %%cython
...: cdef class A:
...: cdef int x
...: def __init__(self):
...: self.x = 0
...: cdef class B:
...: cdef int y
...: def __init__(s
我正在努力学习Cython,并设法将函数定义直接编译到.pyx文件中。
我的下一步是编译连接外部C函数的.pyx。编译成功了,但是当我试图在Python脚本中导入模块时,函数就找不到了。
在文件“Cython-C.pyx”中:
cdef extern from "svar.h":
unsigned long long int svar()
在文件“setup.py”中:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils impo
这是一个关于从Cython融合类型到C++类型的转换的一般问题,我将用一个最小的例子来描述这个问题。考虑一下表面的C++函数模板:
template <typename T>
void scale_impl(const T * x, T * y, const T a, const size_t N) {
for (size_t n = 0; n < N; ++n) {
y[n] = a*x[n];
}
}
我希望能够在任何类型和形状的numpy ndarray上调用这个函数。使用Cython,我们首先声明函数模板:
cdef extern:
我最近一直在使用Cython来加速,但是我的项目继承了一个模块,该模块有一个使用copy()方法的deepcopy()。我试着在一个过度版本的deepcopy()中实现copy(),我认为我已经让它工作了,但现在似乎不再是这样了。
TypeError: object.__new__(cython_binding_builtin_function_or_method) is not safe,
use cython_binding_builtin_function_or_method.__new__()
这种情况出现在python/lib/copy_reg.py中:
return cls.
在Cython中,众所周知,未声明的变量类型会带来更多的开销,从而减缓整个过程。
如果在嵌套循环中使用此未知变量类型,如下所示:
def test(b, c, m, n, p):
ctype double a
for i in range(m)
for j in range(n)
for k in range(p)
a = b + c
return a
开销可能要高得多。在存在许多变量的问题中,人们很容易忘记声明一种或另一种类型,而且编译器不会引发警告,因为Cython完成了所需的开销。
Cython中是否有命令强制显式声明所有变量?