正如評論中所提到的,這取決於你想如何衡量它們。使用您的語句:
最小的權重有被選擇
兩個@Blckknght的概率最高和我有同樣的想法,簡單地加權每個點在PDF中與它的倒數。我建議通過參數一樣
inverse_PDF = 1/(PDF + delta)
加權,其中delta
是你可以控制你的口味的參數。如果delta=0
那麼PDF中原始權重爲零的任何點都會拋出一個ZeroDivisionError
,這通常是不可取的。下面是一個使用numpy的一些示例代碼實現上述:
import numpy as np
# Generate a random points
pts = np.random.normal(size=(10**6,))
# Compute a PDF
PDF,bins = np.histogram(pts, bins=50)
# Normalize (could have used normed=True in hist)
PDF = PDF/np.trapz(PDF, bins[1:])
# Create the inverse distribution
delta = .1
inverse_PDF = 1/(PDF + delta)
# Normalize
inverse_PDF = inverse_PDF/np.trapz(inverse_PDF, bins[1:])
# Plot the results
import pylab as plt
plt.subplot(211)
plt.plot(bins[1:],PDF,lw=4,alpha=.7)
plt.title("Original Distribution")
plt.subplot(212)
plt.plot(bins[1:],inverse_PDF,lw=4,alpha=.7)
plt.title(r"'Inverse' Distribution with $\delta=%.3f$" % delta)
plt.tight_layout()
plt.show()
這取決於你想如何衡量他們。最簡單的方法是用'max_weight - weight + 1'或者別的東西來替換權重,以便以前最高的權重變成1,而以前的權重爲零的權重將是'max_weight'。你可以做各種其他類型的轉換,具體取決於你希望它具有的屬性... – Dougal 2013-04-26 03:01:37
我並不是真正關心權重,而是從分佈中選擇實際的索引。只要他們獲得了比25更好的選擇機會,這很好。 – Clev3r 2013-04-26 03:02:48
您可以在不進行兩次循環迭代的情況下執行此操作:一個用於構建分佈,一個用於重新排列? – Clev3r 2013-04-26 03:09:52