我想創建一個範圍爲[0,1000]的Zipf分佈式數組。如何在Python中使用範圍n從Zipf分佈創建值?
我使用numpy.random.zipf來創建值,但我不能在我想要的範圍內創建它們。
我該怎麼做?
我想創建一個範圍爲[0,1000]的Zipf分佈式數組。如何在Python中使用範圍n從Zipf分佈創建值?
我使用numpy.random.zipf來創建值,但我不能在我想要的範圍內創建它們。
我該怎麼做?
正常化並乘以1000?
a=2
s = np.random.zipf(a, 1000)
result = (s/float(max(s)))*1000
print min(s), max(s)
print min(result), max(result)
雖然不是zipf的全部要點,值的範圍是生成的值的數量的函數?
我同意原始答案(菲利克斯)強迫Zipf值在特定範圍內是非常不尋常的事情,這可能意味着你做錯了什麼。儘管如此,我還是遇到了類似的問題,我確實需要生成符合特定標準的Zipf值。就我而言,我想生成一組與現有數據集類似的全新數據集。我希望總和與現有分配相同,但數值會有所不同。
我的見解是,有可能重新生成值幾次,直到你得到你喜歡的值。
#Generate a quantity of Zipf-distributed values close to a desired sum
def gen_zipf_values(alpha, sum, quantity):
best = []
best_sum = 0
for _ in range(10):
s = np.random.zipf(alpha,quantity)
this_sum = s.sum()
if (this_sum > best_sum) and (this_sum <= sum):
best = s
best_sum=this_sum
return best
同樣,這種解決方案是針對我的問題量身定製的,我希望在沒有超過的情況下生成接近總和的值。我也有一個很好的想法,我每次都想要alpha。爲了清楚起見,我省略了一些檢查,排序等條件。
如果你不得不這樣做了幾次(即你必須運行for循環100萬次才能獲得發行版),那麼你可能有錯誤的東西(比如alpha或者對數值的不切實際的期望) 。我覺得'讓計算機做好工作'是合理的,或者從幾個合理的方面手工挑選最佳選擇。