我有一个情节,我通过2D网格上的鼠标点击事件收集10分[-55 - 55,-35,35]。之后,我添加一个代表10个点的标签并将其保存在列表中。
以下是结果列表的示例条目:
<class 'list'>: [[-38.39, 20.3], [-38.25, 12.27], [-38.39, 5.0], [-38.96, -3.48], [-37.54, -15.61], [-26.33, -7.73], [-28.32, 3.03], [-26.47, 14.24], [-20.08, 15.15], [-18.38, -1.36], [1.0]]
现在我想基于10个样本点生成类似的列表条目。以后数据应作为模型的训练数据,以确定10个点的不同形态。
我希望在一定程度的差异内生成类似点的提示。
答案 0 :(得分:1)
列表理解可行。我只是举个简单的例子:
import numpy as np
point = [-38, 20.3]
[[a, b] for a in np.arange(point[0]-1, point[0]+1.2, 0.2) for b in np.arange(point[1]-1, point[1]+1.2, 0.2)]
Ouput:
[[-39.0, 19.3],
[-39.0, 19.5],
[-39.0, 19.7],
[-39.0, 19.9],
[-39.0, 20.099999999999998],
[-39.0, 20.299999999999997],
[-39.0, 20.499999999999996],
[-39.0, 20.699999999999996],
[-39.0, 20.899999999999995],
[-39.0, 21.099999999999994],
[-39.0, 21.299999999999994],
[-38.8, 19.3],
[-38.8, 19.5],
[-38.8, 19.7],
[-38.8, 19.9],
[-38.8, 20.099999999999998],
[-38.8, 20.299999999999997],
[-38.8, 20.499999999999996],
[-38.8, 20.699999999999996],
[-38.8, 20.899999999999995], ...... etc
对于逼近问题0.x9999999999999,您只需使用round(val, 3)
:
round(20.029999999999998, 3)
Out[182]: 20.03
要回到第一点,您现在只需要在列表中循环,并且每次都生成一组新的点。
new_set = list()
for p in point_list:
new_set.append([[round(a,3), round(b,3)] for a in np.arange(p[0]-1, p[0]+1.2, 0.2) for b in np.arange(p[1]-1, p[1]+1.2, 0.2)])
希望它有所帮助!
答案 1 :(得分:1)
因此,您有一个坐标列表(x, y)
和一个方差var
。您可以以随机方式生成新坐标,如下所示:
(x, y) --> (random(x-var, x+var), random(y-var, y+var))
答案 2 :(得分:1)
只需添加随机x / y值即可轻松对新位置进行采样。我已经附上了这种抽样方法的结果。
points = [[-38.39, 20.3], [-38.25, 12.27], [-38.39, 5.0], [-38.96, -3.48], [-37.54, -15.61], [-26.33, -7.73], [-28.32, 3.03], [-26.47, 14.24], [-20.08, 15.15], [-18.38, -1.36]]
newPoints = []
for point in points:
singleSet = []
for i in range(0, 10):
singleSet.append([point[0] + uniform(-0.5, 0.5), point[1] + uniform(-0.5, 0.5)])
newPoints.append(singleSet)