我有一个问题/想法,我不知道该怎么做。
我有X与Y的散点图
我可以绘制一个矩形,然后选择其中的所有点。
理想情况下,我想定义一个椭圆,因为它可以更好地捕捉形状并排除其外的所有点。
如何做到这一点?它甚至可能吗?我使用matplotlib绘制了图。
我使用线性回归(LR)来拟合点,但这并不是我想要的。 我想定义一个椭圆,以便在其中覆盖尽可能多的点,然后排除它外面的点。如何定义一个方程式/代码来挑选内部的方程式?
答案 0 :(得分:0)
如果您拥有图表中表示的数据结构,则可以使用函数和列表推导来完成此操作。
如果你有这样的列表中的数据:
# Made up data
lst = [
# First element is X, second is Y.
(0,0),
(92,20),
(10,0),
(13,40),
(27,31),
(.5,.5),
]
def shape_bounds(x):
"""
Function that returns lower and upper bounds for y based on x
Using a circle as an example here.
"""
r = 4
# A circle is x**2 + y**2 = r**2, r = radius
if -r <= x <= r:
y = sqrt(r**2-x**2)
return -y, y
else:
return 1, -1 # Remember, returns lower, upper.
# This will fail any lower < x < upper test.
def in_shape(elt):
"""
Unpacks a pair and tests if y is inside the shape bounds given by x
"""
x, y = elt
lower_bound, upper_bound = shape_bounds(x)
if lower_bound < y < upper_bound:
return True
else:
return False
# Demo walkthrough
for elt in lst:
x, y = elt
print x, y
lower_bound, upper_bound = shape_bounds(x)
if lower_bound < y < upper_bound:
print "X: {0}, Y: {1} is in the circle".format(x, y)
# New list of only points inside the shape
new_lst = [x for x in lst if in_shape(x)]
对于椭圆,请尝试根据this
更改形状方程