gpt4 book ai didi

python - 验证均匀分布的 3D 坐标的分布

转载 作者:行者123 更新时间:2023-12-01 09:06:56 26 4
gpt4 key购买 nike

我想编写一个Python脚本来生成均匀分布的3D坐标(例如,x、y、z),其中x、y和z是0到1之间的 float 。目前,z可以是固定的,因此我需要的是 2D (x-y) 平面上的均匀分布点。我已经编写了一个脚本来完成这项工作,并检查了 x 和 y 是否都是统一的数字。但是,我不确定这些点是否均匀分布在 (x-y) 平面上。

我的代码是

1 import matplotlib.pyplot as plt
2 import random
3 import numpy as np
4 import csv
5 nk1=300
6 nk2=300
7 nk3=10
8 kx=[]
9 ky=[]
10 kz=[]
11 for i in range(nk1):
12 for j in range(nk2):
13 for k in range(nk3):
14 xkg1=random.random()
15 xkg2=random.random()
16 xkg3 = float(k)/nk3
17 kx.append(xkg1)
18 ky.append(xkg2)
19 kz.append(xkg3)
20 kx=np.array(kx)
21 count, bins, ignored = plt.hist(kx, normed=True)
22 plt.plot(bins, np.ones_like(bins), linewidth=2, color='r')
23 plt.show()

该图显示“kx”和“ky”都是均匀分布的数字,但是,如何确保 x-y 在 2D 平面上均匀分布?

最佳答案

就像您使用 np.histogram 一样1 要检查一维均匀性,可以使用 np.histogram2d在 2D 中做同样的事情,并且 np.histogramdd 3D+。

要查看示例,我们首先通过让循环消失来修复循环:

kx = np.random.random(nk1 * nk2 * nk3)
ky = np.random.random(nk1 * nk2 * nk3)
kz = np.tile(np.arange(nk3) / nk3, n1 * n2)

hist2d, *_ = np.histogram2d(kx, ky, range=[[0, 1], [0, 1]])

范围参数可确保您在每个方向上对 [0, 1) 进行分箱,而不是对数据的实际最小值和最大值进行分箱,无论数据有多接近。

现在完全取决于您如何可视化 hist2d 中的 100 个数据点。一种简单的方法就是将其整理并制作条形图,就像您对一维情况所做的那样:

plt.bar(np.arange(hist2d.size), hist2d.ravel())
plt.plot([0, hist2d.size], [nk1 * nk2 * nk3 / hist2d.size] * 2)

另一种简单的方法是执行 heat map :

plt.imshow(hist2d, interpolation='nearest', cmap='hot')

这实际上不如条形图有用,并且也不能推广到更高的维度。

您最好的选择可能只是检查原始数据的标准偏差。

<小时/>

1 或者更确切地说 plt.hist 在幕后为你做了。

关于python - 验证均匀分布的 3D 坐标的分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51969307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com