You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:14:15