如何生成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. ECC随机点生成FPGA
- 3. 生成随机树分支
- 4. 根据分布生成一组随机整数列表
- 5. 像国家/州和城市一样下降像
- 6. 如何让像facebook一样的城市/国家下拉菜单?
- 7. 机场,旅游点和城市自动完成
- 8. 生成一组随机数
- 9. 如何从一个统一的分布在PHP中生成一个随机数?
- 10. 用于生成均匀分布的随机位集的方法
- 11. openGL中的随机点生成
- 12. 使随机生成的ImageButtons可点击
- 13. 你把地址分成街道/城市/州/邮编吗?
- 14. 在C中生成正态分布随机值的算法?
- 15. Ruby中生成高斯(正态分布)随机数的代码
- 16. 如何生成均匀分布的随机DFA?
- 17. 从离散分布生成随机数的算法?
- 18. 用R中的双变量伽马分布生成随机数
- 19. 用概率分布生成范围内的随机整数
- 20. 生成具有特定分布的随机数字c
- 21. Ruby 1.9.2中的分布式顺序随机数生成
- 22. 使用Boost生成基于Beta分布的随机数
- 23. 通过R中的随机数生成查找分布
- 24. 从CUDA中的高斯分布生成随机数
- 25. 生成由Zipf分发的随机数
- 26. 二分图的随机生成树
- 27. 生成随机图或随机重新布线图?
- 28. 从N个城市列表中选择一个城市/城市的方式
- 29. 随机点不是均匀分布
- 30. 如何生成像堆栈溢出一样的随机默认“gravatars”?
有趣,谢谢。这导致了“空间统计”和“空间点模式”,其具有许多论文和几本书,但迄今为止没有入口点/没有代码。 – denis 2010-05-14 09:19:28