我洗牌一个数组,比如说,8760个数字,按它们各自的值排序(从低到高),生成一个准随机时间序列。但是,我希望更高的值在结果数组的第一个季度和最后一个季度中出现的几率更高,而在第二个季度和第三个季度中出现的几率更低。 我的问题是:
a = np.array([0, 0, 0, 0, 0, ...
1, 1, 1, ...
...
14, 14, 14, 14, 14, 14])
a_shuff = random.shuffle(a)
# desired resultwould be something like
a_shuff = [14, 14, 8, 12, ... 0, 4, 2, 6, 3, ... 13, 14, 9, 11, 12]
可能需要注意的是,每个值在数组中的出现次数不同。你知道吗
我希望这能很好地描述我的问题——我对Python和Stackoverflow都是新手。我很高兴回答关于这件事的任何进一步的问题。你知道吗
解决方案
通过按照答案中的建议对我的值进行排序,并沿轴对每个值应用递增概率值(而和(p)必须等于一),我能够成功地使用Numpy的随机选择函数。这可能不是我问的问题的答案,但是它做了同样的事情(至少在这个特定的情况下):
#convert list to array (list was necessary previously) v_time = np.empty(0) for r in range(len(temp)): v_time = np.append(v_time, temp[r]) #sort values by desired probablity - this step may vary depending on desired #trend in shuffled data arrayA = v_time[0::2] arrayB = v_time[1::2] arrayB = np.flip(arrayB) v_time = np.concatenate((arrayB, arrayA)) #create probability values for customizing your weights p = np.linspace(0.01, 1, len(v_time)) p = p / sum(p) #shuffle array v_timeShuff = np.random.choice(v_time, v_time.size, False, p)
虽然大多数洗牌函数是统一的,但已经实现了几个非统一的函数。例如,Rodrigo Agundez实现了Elitist Shuffle,这在本例中非常有效。你知道吗
另一种方法是分成分位数(已经排序了,这很容易),在洗牌过程中,根据有偏的选择在每一步都画,其中分位数越高概率越高。你知道吗
相关问题 更多 >
编程相关推荐