如何在不超过最大值且不低于最小值的情况下在起始值之间生成随机游走数据?
这是我这样做的尝试,但由于某种原因,有时该系列会超过最大值或低于最小值。似乎开始和结束值受到尊重,但不是最小值和最大值。如何解决这个问题?我也想给出波动的标准偏差,但不知道如何。我使用了randomPerc
波动,但这是错误的,因为我想指定标准。
import numpy as np
import matplotlib.pyplot as plt
def generateRandomData(length,randomPerc, min,max,start, end):
data_np = (np.random.random(length) - randomPerc).cumsum()
data_np *= (max - min) / (data_np.max() - data_np.min())
data_np += np.linspace(start - data_np[0], end - data_np[-1], len(data_np))
return data_np
randomData=generateRandomData(length = 1000, randomPerc = 0.5, min = 50, max = 100, start = 66, end = 80)
## print values
print("Max Value",randomData.max())
print("Min Value",randomData.min())
print("Start Value",randomData[0])
print("End Value",randomData[-1])
print("Standard deviation",np.std(randomData))
## plot values
plt.figure()
plt.plot(range(randomData.shape[0]), randomData)
plt.show()
plt.close()
这是一个简单的循环,用于检查低于最小值或高于最大值的系列。这正是我想要避免的。该系列应分布在最小值和最大值的给定限制之间。
## generate 1000 series and check if there are any values over the maximum limit or under the minimum limit
for i in range(1000):
randomData = generateRandomData(length = 1000, randomPerc = 0.5, min = 50, max = 100, start = 66, end = 80)
if(randomData.min() < 50):
print(i, "Value Lower than Min limit")
if(randomData.max() > 100):
print(i, "Value Higher than Max limit")