You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于正弦函数规则排序数值,生成模拟心率波动的mock数据?

实现方案

方案1:基于自定义排序key实现(符合你原本的思路)

你的需求对应[0, π]区间内的正弦函数走势:值从0升到1再回落至0,正好匹配从谷值60升到峰值100再回落至60的规律,实现逻辑如下:

  1. 先把你生成的所有随机数做升序排序
  2. 给结果数组的每个位置计算对应的正弦权重,按照权重从小到大的顺序分配排序后的随机数,最终得到的数组就会自然呈现正弦走势
import numpy as np

# 你原来的生成随机数逻辑
A = []
for _ in range(10000):
    value = np.random.randint(60,100)
    A.append(value)

# 正弦形态排序实现
n = len(A)
sorted_A = sorted(A)
# 计算每个位置的正弦权重
weight = np.sin(np.pi * np.arange(n) / (n-1))
# 按权重从小到大排序得到位置索引
sorted_pos = np.argsort(weight)
# 构建结果数组:把升序的数值按权重位置分配
res = np.zeros_like(A)
res[sorted_pos] = sorted_A

# 输出结果就是你要的正弦形态数组
print(res)

如果需要多峰波动效果(多个心率周期),把权重计算里的np.pi改成2 * np.pi * 周期数即可。

方案2:直接生成带随机波动的正弦模拟心率(更适合mock场景)

如果不需要固定使用你提前生成的那批随机数,直接生成的方案更简单,还可以加入自然的小波动,更接近真实心率:

import numpy as np

n = 10000
# 基础正弦曲线:60是谷值,40是峰谷差
base = 60 + 40 * np.sin(np.pi * np.arange(n) / (n-1))
# 加入±2的随机波动,模拟真实心率的小起伏
mock_heart_rate = np.clip(base + np.random.randint(-2, 3, size=n), 60, 100).astype(int)

方案3:Faker实现思路

Faker的providers.health模块内置了heart_rate()方法,可以直接生成符合正常人心率范围的数值,你可以结合上面的正弦权重,给不同位置的数值设定生成范围,就能得到正弦形态的心率数据。但这个方案需要额外引入Faker依赖,灵活度也不如自己生成,除非你已经在项目里用了Faker,否则更推荐前两个方案。


内容的提问来源于stack exchange,提问作者Serena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:09:02