我对cython中的并行编程相当陌生,我试图从numpy创建一个大小为3的1D数组,但是我不能给这个数组赋值,除非我逐个元素地指定它。
import numpy as np
cimport numpy as cnp
cdef int num = 3
cdef cnp.ndarray[cnp.int_t, ndim = 1] Weight = np.ones((num), dtype = "int")
Weight[2] = 6
print(Weight)
产量-〉[1 1 6]
Weight = cnp.ndarray([1,2,3])
输出-〉值错误:缓冲区的维数错误(应为1,实际为3)
1条答案
按热度按时间0yg35tkg1#
在评论中我建议修改:
到
只是为了澄清我的评论多一点:
这条线
型
实际上是两部分:
cdef cnp.ndarray[cnp.int_t, ndim = 1] Weight
这没有分配内存,它只是创建了一个可以引用numpy数组的变量,并且允许快速索引。
Weight = np.ones((num), dtype = "int")
这是对
np.ones
的一个普通的 Python 调用,它为数组分配内存。它在很大程度上没有被Cython加速。从这一点开始,Weight
是对那个分配的数组的引用,并且可以用来改变它。注意下面几行中的Weight = ...
将改变Weight
引用的数组。因此,我建议您跳过
np.ones
步骤,直接要知道,使用这些声明唯一能加快Numpy对数组的索引,几乎所有其他的Numpy调用都是通过普通Python机制进行的,需要GIL,并且以普通Python的速度进行。