我希望解压缩通过套接字来的列数据-一堆int,然后一堆float等,因此它比struct.unpack
快
我当时在考虑使用cython数组,但是找不到常规的python脚本中的使用方法,因为cython示例使用了
from cpython cimport array
我想知道是否可以在纯python模式(类似于cython.locals
的情况下)定义cython数组,如果可以,怎么做。
答案 0 :(得分:0)
Cython可以处理C型数组(即指向内存位置的指针)和typed memoryviews。实际上,内存视图对应于NumPy数组或buffer objects。
C型数组很难手动管理,而NumPy数组在内存管理方面更为方便。实际上,在NumPy数组/内存视图/缓冲区对象上的性能与“按点C”完成数据存储(指向内存位置的指针)相同,我强烈建议使用NumPy管理数据并传递它周围。任何知道缓冲协议且允许C速度计算的Cython或Python代码,只要计算代码为Cython / C / C ++。答案 1 :(得分:0)
我的查询是关于以最小的开销反序列化列数据。
我使用cast()选项在纯Python中为我的内存视图找到了解决方案:
from struct import pack, unpack
# Generate sample packed data
# data = 1,2
# pack('2i', *data)
# Result: b'\x01\x00\x00\x00\x02\x00\x00\x00'
# Unpack sample columnar data coming from socket
socket_data = b'\x01\x00\x00\x00\x02\x00\x00\x00'
memoryview(socket_data ).cast('i').tolist()
# Result: [1,2]
这允许一次创建一个memoryview,然后根据需要将数据拆成大块。