在Cython中无法为NumPy数组赋值的问题求助
解决Cython中NumPy一维数组整体赋值的错误
你遇到的ValueError是因为对numpy.ndarray构造函数的参数用法理解有误:
cnp.ndarray([1,2,3])里的[1,2,3]被当成了数组的形状参数,numpy会认为你要创建一个3维数组(各维度大小为1、2、3),这和你声明的ndim=1一维数组类型冲突,所以报错。
正确的整体赋值方式
有两种简单的解决办法:
- 使用
np.array()直接生成一维数组并赋值
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 = np.array([1,2,3], dtype=np.int_) print(Weight)
输出:[1 2 3]
- 若要直接用
cnp.ndarray构造,需明确指定形状和数据缓冲区
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") # 先定义数据缓冲区,再指定形状构造数组 cdef int[:] data = [1,2,3] Weight = cnp.ndarray(shape=(3,), dtype=np.int_, buffer=data) print(Weight)
输出:[1 2 3]
内容的提问来源于stack exchange,提问作者Sumanth
相关产品推荐
相关产品推荐

