Mic*_*ang 10 arrays list cython python-3.x
我想将以下python
代码转换为Cython
:
x_array = []
x_array.append(x_new)
Run Code Online (Sandbox Code Playgroud)
我尝试了以下 Cython 代码,但它给出了错误:
cdef np.ndarray[double, dim=1] x_array
x_array.append(x_new)
Run Code Online (Sandbox Code Playgroud)
错误显示:
Cannot coerce list to type [double, dim=1]
Dav*_*idW 15
您的选择是:
cdef list x_array
. 这让 Cython 知道类型x_array
实际上是一个列表。您可能会从中获得小幅加速。
做x_array
一个numpy的阵列来代替。如果列表中的所有元素都是相同的简单数字类型,那么这可能是更好的选择。请注意,append
使用 numpy 数组可能会非常慢,因此您应该提前计算大小。
cdef np.array[double, dim=1] x_array = np.zeros((some_precomputed_size,))
# or
cdef double[:] x_array = np.zeros((some_precomputed_size,))
Run Code Online (Sandbox Code Playgroud)
请注意,这只会加快某些类型的操作(主要是访问 Cython 中的单个元素)
如果您开始使用 Python ,list
有时可以通过 Cython 中的 Python C API 访问它们来提高速度。这个答案提供了一个很好的例子。这在您事先知道大小时效果最好,因此您可以预先分配数组(即不要append
!)并避免一些 Cython 引用计数。使用这种方法很容易出错并导致引用计数错误,因此请谨慎操作。
归档时间: |
|
查看次数: |
12498 次 |
最近记录: |