gpt4 book ai didi

python - 使用 numpy 和 pandas 本地化随机点

转载 作者:行者123 更新时间:2023-12-01 05:27:16 25 4
gpt4 key购买 nike

我的想法是尝试生成随机数据点(2D、x 和 y 坐标),这些数据点彼此非常接近,模仿以下场景:

  1. 我选择例如一件元素得 10 分。
  2. 数据库中有 200 个此类对象。
  3. 我记录了所有对象上相同位置的 10 个点的坐标。因此,我拥有的数据由 200x10 行组成,因此前 10 行代表第一个对象上采样的 10 个点的坐标,接下来的 10 行代表第二个对象上的相同点,依此类推。

对象中的点的集合在散点图中应该接近,但它们不应该完全相同,也不应该相距太远。现在,如果我使用普通随机生成器,大多数时候我都会得到很多均匀分布的随机点......

这是我尝试使用 numpy、pandas 和 matplotlib 以及来自 this 的多变量正态分布的酷用法的过程。发布。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import brewer2mpl as bmpl

#the part of the code I use for generating correlated ranges for points
#but I have used it for generating x,y coords as well but it didn`t work out

corr = 0.95
means = [200, 180]
stds = [10, 10]
covs = [[stds[0]**2, stds[0]*stds[1]*corr],[stds[0]*stds[1]*corr, stds[1]**2]]
coordstest = np.random.multivariate_normal(means, covs, 20)

#now the part for generating x and y coords

coords1x = np.random.uniform(coordstest[0,0], coordstest[0,1], 200)
coords1y = np.random.uniform(coordstest[1,0], coordstest[1,1], 200)
coords2x = np.random.uniform(coordstest[2,0], coordstest[2,1], 200)
coords2y = np.random.uniform(coordstest[3,0], coordstest[3,1], 200)
... up to 10

#them make them into two-column arrays

coords1 = np.vstack((coords1x, coords1y)).T
coords2 = np.vstack((coords2x, coords2y)).T
... up to 10

#and generate individual levels

individuals = np.arange(0,200) #generate individual levels
individuals = np.tile(individuals, 10)
individuals = pd.Series(individuals)

#finally generate pandas data frame and plot the results

allCoords = np.concatenate((coords1, coords2, coords3, coords4, coords5, coords6, coords7, coords8, coords9, coords10))
allCoords = pd.DataFrame(allCoords)
allCoords.columns = ['x','y']
allCoords['individuals'] = individuals
allCoords['index'] = allCoords.index.tolist()

allCoords = allCoords.sort_index(by=['individuals', 'index'])
del allCoords['index']
allCoords = allCoords.set_index(np.arange(0,2000))

plt.scatter(allCoords['x'], allCoords['y'], c = allCoords['individuals'], s = 40, cmap = 'hot')

这是散点图

Scatter plot

并且相同颜色的点应该在本地分组。有什么想法可以实现这一点吗?

最佳答案

事实上,您生成正态分布区间,然后生成其中的均匀分布点。毫不奇怪,您最终会得到非共置的点组。

要获得共置点组,您应该选择预期位置:

coordstest = np.vstack([np.random.uniform(150, 220, 20), 
np.random.uniform(150, 220, 20)]).T

然后根据它们生成点:

coords = np.vstack([np.random.multivariate_normal(coordstest[i,:], covs, 200) 
for i in range(10)])

和情节

individuals = (np.arange(0,200).reshape(-1,1)*np.ones(10).reshape(1,-1)).flatten()
individuals = pd.Series(individuals)

allCoords = pd.DataFrame(coords, columns = ['x','y'])

plt.scatter(allCoords['x'], allCoords['y'], c = individuals,
s = 40, cmap = 'hot')

enter image description here

请注意,由于 multivariate_normal 的非平凡协方差参数,点是通过线性依赖性生成的。如果您不需要它,您可以这样做

coords = np.vstack([np.random.multivariate_normal(coordstest[i,:], 
[[10,0],[0,10]], 200) for i in range(10)])

结果

enter image description here

关于python - 使用 numpy 和 pandas 本地化随机点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21080357/

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