如何生成1000個隨機點,其分佈類似於例如 城鎮的分佈。俄亥俄?
恐怕我無法精確地定義「像城市一樣分佈」; 均勻分佈的中心+小高斯雲 很容易但特設。
添加:必須有一個2d分佈系列 聚類參數可以變化以匹配給定的一組點?生成像城市一樣分佈的隨機點嗎?
5
A
回答
1
在java中,這是通過new Random().nextGaussian()
提供的。由於Java源代碼可用,你可以看看它:
synchronized public double nextGaussian() {
// See Knuth, ACP, Section 3.4.1 Algorithm C.
if (haveNextNextGaussian) {
haveNextNextGaussian = false;
return nextNextGaussian;
} else {
double v1, v2, s;
do {
v1 = 2 * nextDouble() - 1; // between -1 and 1
v2 = 2 * nextDouble() - 1; // between -1 and 1
s = v1 * v1 + v2 * v2;
} while (s >= 1 || s == 0);
double multiplier = StrictMath.sqrt(-2 * StrictMath.log(s)/s);
nextNextGaussian = v2 * multiplier;
haveNextNextGaussian = true;
return v1 * multiplier;
}
}
繪製使用
x = r.nextGaussian() * rad/4 + rad;
y = r.nextGaussian() * rad/4 + rad;
債收益率這座美麗的城市30000個住房:
2
也許你可以採取看看Walter Christaller的Theory of Central Places。我想在某個地方必須有一個發生器,或者你可以自己做。
2
從你目標區域的水景特徵開始(或者如果它是一個虛構的地方,那麼建立一個水景),然後將城市附近的城市聚集在湖岸,湖岸,湖泊河流交匯處。然後製作連接這些主要城市的虛高速公路。現在以合理的間距在這些高速公路上灑上一些中間城市,寧願靠近高速公路的路口。現在將一些小城鎮灑在空蕩蕩的空間裏。
1
具有泊松聚類大小的高斯聚類很好地工作。
問題:產生與給定城市大致類似的隨機點,在美國說。
子問題:
A)描述簇與數字的行,從而使 「簇A是像簇B」 簡化爲「clusternumbers(A)是像 「clusternumbers(B)」
運行N = 100。然後1000點通過fcluster下方,ncluster = 25,給出
N 100 ncluster 25: 22 + 3 r 117
sizes: av 4 10 9 8 7 6 6 5 5 4 4 4 ...
radii: av 117 202 198 140 134 64 62 28 197 144 148 132 ...
N 1000 cluster 25: 22 + 3 r 197
sizes: av 45 144 139 130 85 84 69 63 43 38 33 30 ...
radii: av 197 213 279 118 146 282 154 245 212 243 226 235 ...
b)中找到隨機發生器的combiation有2個或3個參數 ,其可被改變以產生不同的聚類。
高斯簇與泊松簇大小可以匹配集羣的城市相當好:
def randomclusters(N, ncluster=25, radius=1, box=box):
""" -> N 2d points: Gaussian clusters, Poisson cluster sizes """
pts = []
lam = eval(str(N // ncluster))
clustersize = lambda: np.random.poisson(lam - 1) + 1
# poisson 2: 14 27 27 18 9 4 %
# poisson 3: 5 15 22 22 17 10 %
while len(pts) < N:
u = uniformrandom2(box)
csize = clustersize()
if csize == 1:
pts.append(u)
else:
pts.extend(inbox(gauss2(u, radius, csize)))
return pts[:N]
# Utility functions --
import scipy.cluster.hierarchy as hier
def fcluster(pts, ncluster, method="average", criterion="maxclust"):
""" -> (pts, Y pdist, Z linkage, T fcluster, clusterlists)
ncluster = n1 + n2 + ... (including n1 singletons)
av cluster size = len(pts)/ncluster
"""
# Clustering is pretty fast:
# sort pdist, then like Kruskal's MST, O(N^2 ln N)
# Many metrics and parameters are possible; these satisfice.
pts = np.asarray(pts)
Y = scipy.spatial.distance.pdist(pts) # N*(N-1)/2
Z = hier.linkage(Y, method) # N-1, like mst
T = hier.fcluster(Z, ncluster, criterion=criterion)
clusters = clusterlists(T)
return (pts, Y, Z, T, clusters)
def clusterlists(T):
""" T = hier.fcluster(Z, t) e.g. [a b a b c a]
-> [ [0 2 5] [1 3] ] sorted by len, no singletons [4]
"""
clists = [ [] for j in range(max(T) + 1)]
for j, c in enumerate(T):
clists[c].append(j)
clists.sort(key=len, reverse=True)
n1 = np.searchsorted( map(len, clists)[::-1], 2)
return clists[:-n1]
def radius(x):
""" rms |x - xmid| """
return np.sqrt(np.mean(np.var(x, axis=0)))
# * 100 # 1 degree lat/long ~ 70 .. 111 km
相關問題
- 1. 隨機2D城市景觀生成器,我如何隨機生成?
- 2. 從反伽瑪分佈隨機生成隨機採樣C++
- 3. 隨機生成一個隨機布爾
- 4. 均勻分佈的隨機數生成
- 5. 生成指數分佈的隨機數
- 6. 生成具有特定分佈的隨機樣本
- 7. 在一個地區(國家/城市)內生成隨機緯度經度值
- 8. 從指數分佈生成隨機數
- 9. 生成確定性隨機分佈的實點系列
- 10. 隨機樣本生成器
- 11. 生成一個邊緣均勻分佈的隨機圖
- 12. 生成一個非均勻分佈的隨機數
- 13. ECC隨機點生成FPGA
- 14. 在均勻分佈的矩形邊界上生成一個隨機點
- 15. 分層隨機抽樣及其分佈
- 16. 生成隨機樹分支
- 17. 根據分佈生成一組隨機整數列表
- 18. 生成一個隨機變量與指數分佈
- 19. 像國家/州和城市一樣下降像
- 20. 隨機城市街道一代使用瓷磚
- 21. 基於隨機分佈樣本生成相同數字的VBA函數
- 22. 統一分佈隨機
- 23. 機場,旅遊點和城市自動完成
- 24. 如何讓像facebook一樣的城市/國家下拉菜單?
- 25. 生成在某個點的隨機樣本在Matlab
- 26. 生成一組隨機數
- 27. 生成一個隨機值
- 28. 從隨機矩陣生成樣本
- 29. 隨機樣本數據集生成器
- 30. 如何從一個統一的分佈在PHP中生成一個隨機數?
有趣,謝謝。這導致了「空間統計」和「空間點模式」,其具有許多論文和幾本書,但迄今爲止沒有入口點/沒有代碼。 – denis 2010-05-14 09:19:28