假设我有一个传感器的数据,格式如下:

data = [100, 140, 200, 250, 210, 300, 350, 380, 400, 333, 352, 399, 599, 899]

我想从这些数据中删除分辨率,以便以后可以在嵌入式设备中修改它的C++格式.

我想强行解析数据.例如:没有一步必须低于50,那么,所有的值必须向上或向下舍入,我不在乎,一个乘法50.结果必须是:

data = [100, 150, 200, 250, 250, 300, 350, 400, 400, 350, 400, 400, 600, 900]

我试过这个代码:

def curate_data(data: list, step_size: int = 1000):
    def _round(number, increment, offset):
        return round((number - offset) / increment) * increment + offset

    curated_data = [data[0]]
    for i in range(1, len(data)):
        append_value = int(data[i])
        if data[i] - curated_data[-1] < step_size:
            # round to nearest multiple of step_size
            append_value = _round(number=data[i], increment=step_size, offset=0)
        curated_data.append(append_value)
    return curated_data

但它没有产生我预期的结果.

如何管理这些数据以达到所需的分辨率?谢谢

推荐答案

您可以使用floor div并重新计算.你说你不在乎它是向上还是向下.这将根据预期遵循的规则进行回合.

data = [100, 140, 200, 250, 210, 300, 350, 380, 400, 333, 352, 399, 599, 899]
  
# round integers to multiples of step
def iround_by(num:int, step:int=50) -> int:
    return int((step/2+num)//step*step)
    
out = list(map(iround_by, data))
    
print(out)
output
[100, 150, 200, 250, 200, 300, 350, 400, 400, 350, 350, 400, 600, 900]

Python相关问答推荐

使用SciPy进行曲线匹配未能给出正确的匹配

仿制药的类型铸造

运行总计基于多列pandas的分组和总和

查找两极rame中组之间的所有差异

无法使用DBFS File API路径附加到CSV In Datricks(OSError Errno 95操作不支持)

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

计算天数

提高算法效率的策略?

Cython无法识别Numpy类型

统计numpy. ndarray中的项目列表出现次数的最快方法

递归函数修饰器

如何获得满足掩码条件的第一行的索引?

Python OPCUA,modbus通信代码运行3小时后出现RuntimeError

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

Regex用于匹配Python中逗号分隔的AWS区域

如何从数据框列中提取特定部分并将该值填充到其他列中?

启动线程时,Python键盘模块冻结/不工作

PYTHON中的selenium不会打开 chromium URL

try 使用RegEx解析由标识多行文本数据的3行头组成的日志(log)文件