Cython中构建memoryview数组的两类问题求助
我之前参考相关回答想要构建memoryview数组,过程中遇到了两类问题,具体情况如下:
问题1:构建固定长度的二维memoryview数组
我最先尝试了这段代码:
mv1 = memoryview(b'1234') mv2 = memoryview(b'abcd') cdef const unsigned char[:,:] tmv = (mv1, mv2)
结果抛出了报错:
TypeError: a bytes-like object is required, not 'tuple'
之后我试着用指针的C数组来实现:
ctypedef const unsigned char[:] k_t cdef unsigned char* mva[2] mv1 = memoryview(b'1234') mv2 = memoryview(b'abcd') cdef k_t mvk1 = mv1 cdef k_t mvk2 = mv2 mva = (&mvk1, &mvk2)
但还是报错了:
Cannot take address of memoryview slice
编辑(问题1补充):后来我加入Cython array尝试,还是出现了相同的报错:
from cython cimport view mv1 = memoryview(b'1234') mv2 = memoryview(b'abcd') cvarr = view.array(shape=(2,1), itemsize=sizeof(char), format='B') cvarr = (mv1, mv2) print(cvarr[0][1]) # 正常输出50 cdef const unsigned char[:,:] cvw = cvarr # 此行抛出报错:a bytes-like object is required, not 'tuple'
我现在很困惑:为什么元组可以用于Cython array,却没法用来初始化memoryview呢?
问题2:构建任意长度的三维数组
这个需求本质上是上述二维数组对象组成的列表。我参考了相关回答和Cython内存分配文档后有了一些思路(打算用malloc和指针,不想引入C++),但目前因为问题1的阻碍没法推进,求可行的解决方案。
内容的提问来源于stack exchange,提问作者user3758232
相关产品推荐
相关产品推荐

