如何根据正弦函数对值进行排序?

How to Sort Values According to Sine function?

我在排序之前生成了一定范围内的随机数:

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

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

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

完全可以针对此问题提供不同的解决方案。提前致谢!

一种可能性是生成随机阶段,即 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)生成800个区间(0,1)内的随机数,所以需要相乘才能得到想要的区间。

如果使用太多数字,结果与 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函数