首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何解压Cython memoryview

如何解压Cython memoryview
EN

Stack Overflow用户
提问于 2019-05-05 10:42:46
回答 1查看 193关注 0票数 0

我有一个32位无符号整数的内存视图,我想将它们解压到一些字符、整数和字符串中(如果需要,也可以解压缩为字符数组)。

代码语言:javascript
运行
复制
cdef const unsigned int[:] bin_file = np.fromfile(rom_fd, dtype='<u4')

此二进制文件的前192个字节用作标头,其中包含有关文件其余部分的元数据。

我想从内存视图(或内存视图切片:bin_file[:48])中解压这些字节。

从内存视图中获取一个int很容易:

代码语言:javascript
运行
复制
cdef unsigned int first_int = bin_file[0]

但是,我不确定获取其他数据类型的最佳方法,特别是那些在内存视图中跨越多个条目的数据类型。

我希望能够使用类似于

代码语言:javascript
运行
复制
cdef char[12] my_string = bin_file[40:43]

但这只会给出一个错误:“无法将类型'const unsigned int‘赋值给'char 12'”。

EN

回答 1

Stack Overflow用户

发布于 2019-05-08 02:58:43

我认为最好的方法是使用numpy ndarray.view函数将数组视为另一种类型。你不会从Cython中获得任何加速(因为你只是使用numpy函数),但是我能想到的在Cython中做这件事的大多数方法似乎很快就会导致灾难。

代码语言:javascript
运行
复制
cdef char[::1] my_string = np.asarray(bin_file[40:43]).view(dtype=np.uint8)

注意,我已经使用::1语法指定了my_stringbin_file (未显示)是连续的。如果这不是真的,那么你试图将它们视为不同类型的内存是行不通的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55988402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档