我正在尝试初始化内存视图的一个切片(不是整个)。假设我有 memoryviewA
作为类的属性(扩展类型)
from cython.view cimport array as cvarray
N = 1000
cdef double[:,:,::1] A = cvarray(shape=(2,N,N),itemsize=sizeof(double),format='d')
现在,我试图在一个cdef
函数中初始化它。我像这样初始化整个内存视图没有问题
# From elsewhere we have loaded a numpy.ndarray B of size (2,N,N)
A[:,:,:] = B
当初始化器B
是 3D 数组时这很好,(2,N,N)
这样我们就不必切片 A
了。但是现在,问题就在这里:假设我有 2D 数组B1
,B2
大小为 (N,N),并尝试初始化为
A[0,:,:] = B1
A[1,:,:] = B2
这给了我以下错误:
TypeError: only length-1 arrays can be converted to Python scalars
当然,我可以将所有数据从B1
和一个一个地复制B2
到A
,但这不会有效。这个过程是一个循环,而且规模N
很大。B1
并以类型B2
加载netcdf文件numpy.ndarray
。
另外,我将其定义A
为内存视图,以便在代码中的其他地方我可以使用nogil
函数而不是访问A
.
我想知道是否有一种有效的方法来如上所述初始化 memoryview,或者至少以某种方式使用 and 的指针B1
并将B2
它们放在一个可迭代的数组中。谢谢。