我需要将bytes个数据转换为带符号的int32_t格式,并将其放入列表中.(它是关于通过以太网从外部ADC转换器接收ADC数据).

对我来说,迄今为止最快的方法是:

tempADC = np.ndarray(256,np.intc,rawADC).tolist()

256-i将有256个int32_t值

RawADC-是否为原始字节:b'T\x08\x00\x00W\xf2\xff\xff\xfe\....

一些度量(mean = 20 usec0次迭代):mean = 20 usec,max = 1130 usec

第二种方法:

ln =  int(len(rawADC)/4)
tadc = [0]*256 #prealloc list - buffer
for i in range(ln):    
 tadc[i] = (int.from_bytes(rawADC[i:(i+4)], byteorder='little', signed=True))

一些度量(mean = 181 usec0次迭代):mean = 181 usec,max = 1150 usec

有没有更有效的方法来做到这一点?

meanmax之间的巨大差异很奇怪-但我的程序中有两个线程,所以可能这就是原因?!?

推荐答案

我假设您从ADC输入的数据可以用以下公式模拟:

import numpy as np
input = np.arange(256,dtype=np.uint32).tobytes()

所以,我会试着这样解开:

import struct
%timeit struct.unpack('<256I',input)
735 ns ± 1.57 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Python相关问答推荐

从numpy数组和参数创建收件箱

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

Polars:用氨纶的其他部分替换氨纶的部分

在Mac上安装ipython

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

如何将多进程池声明为变量并将其导入到另一个Python文件

如何使用Python以编程方式判断和检索Angular网站的动态内容?

cv2.matchTemplate函数匹配失败

在两极中过滤

如何在两列上groupBy,并使用pyspark计算每个分组列的平均总价值

从列表中获取n个元素,其中list [i][0]== value''

ruamel.yaml dump:如何阻止map标量值被移动到一个新的缩进行?

为什么调用函数的值和次数不同,递归在代码中是如何工作的?

当单元测试失败时,是否有一个惯例会抛出许多类似的错误消息?

将数字数组添加到Pandas DataFrame的单元格依赖于初始化

如何关联来自两个Pandas DataFrame列的列表项?

Match-Case构造中的对象可调用性测试

普洛特利express 发布的人口普查数据失败

Pandas 身上的负数造型

在行数据为向量的DataFrame上计算逐行更改