0

在对它进行排序之前,我已经生成了一定范围内的随机数:

A = []
for _ in range(10000):
    value = np.random.randint(60,100)
    A.append(value)
A = sorted(A)

但我想要做的是获得一个像正弦图一样排序的 A 列表(带有峰值和谷值)。所以本质上,值应该以逐渐上升和下降的方式排序,谷值在 60​​ 处,峰值在 100 处。

我正在尝试创建非常简单的模拟心率的模拟数据。我曾考虑过使用自定义键进行排序,但我不知道从哪里开始。我也研究过 Faker,但我认为我无法用它生成我想要的数据(如果我错了,请纠正我!)

完全为这个问题提供不同的解决方案。提前致谢!

4

1 回答 1

0

一种可能性是生成随机相位,即sin函数的参数。您必须首先决定您想要多少个周期(每个周期有一个谷值和一个峰值)。如果你想要CY循环,那么你必须生成范围内的数字(0, N * 2 * pi)

然后对阶段进行排序,最后将sin函数应用于阶段。

import numpy as np
CY = 8
ph = np.random.rand(800) * CY * 2 * np.pi
ph.sort()
A = np.sin(ph)

# then you can plot the numbers, for example
from matplotlib import pyplot as plt
plt.plot(A)
plt.show()

在此处输入图像描述

该函数调用np.random.rand(800)在区间 (0,1) 中生成 800 个随机数,因此您必须将其相乘以获得所需的区间。

如果使用太多数字,则结果与 sin 函数无法区分。

另一个可能性是从一个sin函数开始,然后添加随机数:

N = 800; CY = 8; DEV = 0.3
sin = np.sin(np.linspace(0, CY*2*np.pi, N)) 
A = sin + np.random.rand(N) * DEV

在此处输入图像描述

您也可以尝试将 sin 函数更改为另一个

于 2021-10-17T02:58:50.003 回答