首页 > 编程问答 >基于时间戳的比例位置计算

基于时间戳的比例位置计算

时间:2024-08-03 16:51:21浏览次数:15  
标签:python algorithm math

我目前正在研究解决以下问题

问题:

根据时间戳,尽可能按比例确定其位置值。

当前公式:

position= 最小位置+(最大位置−最小位置)× (最大时间戳−最小时间戳)/ (timestamp−min_timestamp)

我使用的数据集:

时间戳差异 = 当前时间戳 - 上一个时间戳

dataset = [
    {"timestamp": 1718778085122, "position": None, "Timestamp diff": 0},
    {"timestamp": 1718778085145, "position": None, "Timestamp diff": 23},
    {"timestamp": 1718778085169, "position": None, "Timestamp diff": 24},
    {"timestamp": 1718778104300, "position": None, "Timestamp diff": 19131},
    {"timestamp": 1718778104327, "position": None, "Timestamp diff": 27},
    {"timestamp": 1718778104356, "position": None, "Timestamp diff": 29},
    {"timestamp": 1718778104357, "position": None, "Timestamp diff": 1},
    {"timestamp": 1718778123487, "position": None, "Timestamp diff": 19130},
    {"timestamp": 1718778123557, "position": None, "Timestamp diff": 70},
    {"timestamp": 1718778123572, "position": None, "Timestamp diff": 15},
    {"timestamp": 1718778123575, "position": None, "Timestamp diff": 3},
    {"timestamp": 1718778142511, "position": None, "Timestamp diff": 18936},
    {"timestamp": 1718778142562, "position": None, "Timestamp diff": 51},
    {"timestamp": 1718778142563, "position": None, "Timestamp diff": 1},
    {"timestamp": 1718778161664, "position": None, "Timestamp diff": 19101},
    {"timestamp": 1718778161761, "position": None, "Timestamp diff": 97},
    {"timestamp": 1718778161762, "position": None, "Timestamp diff": 1}
]

公式的位置结果:

https://www.programiz.com /online-compiler/18tOf6K7QDmht

位置差异 = 当前位置 - 先前位置

Final positions:
Timestamp: 1718778085122, Position: 0.00
Timestamp: 1718778085145, Position: 0.03 ---> Position diff: 0.03)
Timestamp: 1718778085169, Position: 0.06 ---> Position diff: 0.03)
Timestamp: 1718778104300, Position: 25.02 ---> Position diff: 24.96)
Timestamp: 1718778104327, Position: 25.06 ---> Position diff: 0.04)
Timestamp: 1718778104356, Position: 25.10 ---> Position diff: 0.04)
Timestamp: 1718778104357, Position: 25.10 ---> Position diff: 0.00)
Timestamp: 1718778123487, Position: 50.06 ---> Position diff: 24.96)
Timestamp: 1718778123557, Position: 50.15 ---> Position diff: 0.09)
Timestamp: 1718778123572, Position: 50.17 ---> Position diff: 0.02)
Timestamp: 1718778123575, Position: 50.17 ---> Position diff: 0.00)
Timestamp: 1718778142511, Position: 74.88 ---> Position diff: 24.71)
Timestamp: 1718778142562, Position: 74.95 ---> Position diff: 0.07)
Timestamp: 1718778142563, Position: 74.95 ---> Position diff: 0.00)
Timestamp: 1718778161664, Position: 99.87 ---> Position diff: 24.92)
Timestamp: 1718778161761, Position: 100.00 ---> Position diff: 0.13)
Timestamp: 1718778161762, Position: 100.00 ---> Position diff: 0.00)

也就是说,在问题陈述中,我提到其位置“尽可能成比例”,原因是 我希望有那些小于 1 的位置差异值至少为 1。

(另外,为了进一步说明,我希望那些小于 1 的值至少为 1,这样我至少可以有一个当我绘制矩形时,它们是 1 px 值;否则,它们无处可见)

我想要实现的一些标准:

  • 最小的时间戳值始终具有 0 的位置值。最大时间戳值的位置值始终为 100。
  • 最后一个数据点之前的所有值的位置值都小于最后一个值。
  • 所有值也必须是唯一的,并且尽可能与时间戳成比例。
  • 你们能否就如何实现所有这些条件提供一些帮助或反馈?

我想要的结果是这样的:

My desired result is something like this:

--these number are roughly made up just to show my desired data

Final positions:
Timestamp: 1718778085122, Position: 0.00, Timestamp diff: 0
Timestamp: 1718778085145, Position: 2.08, Timestamp diff: 23
Timestamp: 1718778085169, Position: 3.10, Timestamp diff: 24 
Timestamp: 1718778104300, Position: 20.36, Timestamp diff: 19131 
Timestamp: 1718778104327, Position: 22.63, Timestamp diff: 27
Timestamp: 1718778104356, Position: 25.00, Timestamp diff: 29
Timestamp: 1718778104357, Position: 26.00, Timestamp diff: 1
Timestamp: 1718778123487, Position: 45.30, Timestamp diff: 19130 
Timestamp: 1718778123557, Position: 49.66, Timestamp diff: 70
Timestamp: 1718778123572, Position: 50.38, Timestamp diff: 15 
Timestamp: 1718778123575, Position: 51.49, Timestamp diff: 3 
Timestamp: 1718778142511, Position: 69.67, Timestamp diff: 18936
Timestamp: 1718778142562, Position: 73.10, Timestamp diff: 51
Timestamp: 1718778142563, Position: 74.10, Timestamp diff: 1
Timestamp: 1718778161664, Position: 93.37, Timestamp diff: 19101
Timestamp: 1718778161761, Position: 99.00, Timestamp diff: 97
Timestamp: 1718778161762, Position: 100.00, Timestamp diff: 1

我可以帮助你解决这个问题。你的目标是根据时间戳计算位置值,确保这些值与时间差成比例,并且位置差至少为 1。以下是一种可以实现此目的的方法:

1. 归一化时间戳差异:

  • 计算时间戳差异的最大值。
  • 将每个时间戳差异除以最大值,以获得 0 到 1 之间的归一化时间戳差异。

2. 按比例调整位置差异:

  • 确定所需位置值的总数(例如,100)。
  • 将每个归一化时间戳差异乘以位置值的总数,得到按比例调整的位置差异。

3. 累积位置差异并应用下限:

  • 从 0 开始初始化第一个位置。
  • 对于每个按比例调整的位置差异:
    • 如果差异小于 1,则将其设置为 1。
    • 将差异添加到先前的位置,以获得新的位置。

Python 代码:

dataset = [
    {"timestamp": 1718778085122, "position": None, "Timestamp diff": 0},
    {"timestamp": 1718778085145, "position": None, "Timestamp diff": 23},
    {"timestamp": 1718778085169, "position": None, "Timestamp diff": 24},
    # ... 其余数据集 ...
]

# 计算最大时间戳差异
max_time_diff = max(data["Timestamp diff"] for data in dataset)

# 计算位置
total_positions = 100 
current_position = 0
for data in dataset:
    # 归一化时间戳差异
    normalized_diff = data["Timestamp diff"] / max_time_diff

    # 按比例调整位置差异
    position_diff = normalized_diff * total_positions

    # 应用下限并更新位置
    current_position += max(1, position_diff)
    data["position"] = current_position

# 打印结果
for data in dataset:
    print(f"Timestamp: {data['timestamp']}, Position: {data['position']:.2f}, Timestamp diff: {data['Timestamp diff']}")

这种方法可以确保:

  • 最小时间戳的位置为 0(初始位置)。
  • 最大时间戳的位置为 100(总位置)。
  • 位置值按时间戳差异成比例分布。
  • 位置差异至少为 1,从而在视觉表示(如矩形)中可见。

请记住,所得的位置值将大于 100。如果需要将它们保持在 0 到 100 范围内,可以在计算后对它们进行归一化和缩放。

标签:python,algorithm,math
From: 78804241

相关文章

  • Python中动态类和动态方法的创建与调用
    借助于python的动态语言特性,很容易对对象进行添加方法或者属性,这也是python的灵活之一。动态生成类的属性及其方法在某些情况可能要根据不同的参数来动态生成不同的实例方法、静态方法、类方法。下面的例子中则展示了如何动态地向类中添加属性和方法。importtypesclassPers......
  • Python学习中最常见的10个列表操作问题
    列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,这篇文章列出了10个常用的列表操作,希望对你有帮助。1、迭代列表时如何访问列表下标索引普通版:items=[8,23,45]forindexinrange(len(items)):print(index,"-->",items[index])​......
  • Python中定义(创建)、调用函数及返回值
    1.定义(创建)函数要调用一个函数,首先要定义它。在Python中使用关键字def来定义一个函数。函数通常由函数名、参数列表以及一系列语句组成的函数体构成的。函数定义的一般格式如下:def函数名(参数列表):函数体例如:defsayhello(): print('hello')最简单的函数:defm......
  • python用List的内建函数list.sort进行排序
    对List进行排序,Python提供了两个方法方法1用List的内建函数listsort进行排序listsort(func=None,key=None,reverse=False)Python实对List进行排序,Python提供了两个方法方法1.用List的内建函数list.sort进行排序list.sort(func=None,key=None,reverse=False)>>>list=......
  • 禁用 GIL 的 Python 3.13 非常慢
    我对python3.12.0与使用3.13.0b3标志编译的python--disable-gil进行了简单的性能测试。该程序使用ThreadPoolExecutor或ProcessPoolExecutor执行斐波那契数列的计算。引入禁用GIL的PEP文档表示,存在一些开销,主要是由于有偏差......
  • 有没有办法阻止 setUp() 为 python 测试用例中的每个测试方法启动浏览器?
    我正在练习编写Web自动化测试用例,并且编写了一些函数来测试登录、在用户主页中查找我的用户名以及测试GitHub的注销功能。然而,我通过经验和阅读了解到setUp()是在每个测试方法之前启动的,而我的问题是在每个测试方法之前它都会打开一个新的浏览器。我希望我的所有测......
  • 尝试使用Python抓取需要先登录的网站但没有成功
    我正在尝试抓取一个需要登录的网站(我的路由器GUI),但无论我做了什么,我都会反复返回登录站点的源代码,而不是成功登录后出现的页面。我做了一些阅读,并意识到我需要返回POST请求的答案。我想我找到了它们并返回了所需的值,但仍然-似乎没有任何效果。我使用https://curl.tri......
  • 给python初学者的一些建议
    写在开篇关于Python,可以这么说,这几年借着数据科学、机器学习与人工智能的东风,Python老树开新花,在风口浪尖上居高不下。Python之所以这么受大家的青睐,是因为它语言简洁,上手容易,让非计算机专业的人员也能快速上手,享受编程开发带来的便利和福利。但Python再简单,它也是一......
  • Python中15个递归函数经典案例解析
    1.阶乘计算阶乘是一个常见的递归应用,定义为n!=n*(n-1)*…*1。deffactorial(n):ifn==0:return1else:returnn*factorial(n-1)print(factorial(5))#输出:1202.斐波那契数列斐波那契数列的每一项都......
  • 如何使用 python (使用服务帐户)在应用程序脚本 Web 应用程序上触发 doGet()?
    我想从返回json的应用程序脚本Web应用程序触发doGet(e)事件。我们的网络应用程序无法在我们的组织域之外访问,因此需要服务帐户。我执行了下面的代码,但“发生错误:401客户端错误”fromgoogle.oauth2importservice_accountfromgoogle.auth.transport.requestsimpor......