我有一个由mx+b定义的行,其中m,b是从np.linalg.lstsq获取的变量。
还创建了一个称为“距离”的函数,定义为:
def distance(x0, y0, slope, yintercept):
"""Returns the euclidean distance between a line and
a point"""
return abs(slope*x0-y0+yintercept)/(slope**2+1)**.5为了方便起见,我创建了一个向量化表单,如下所示:
vdistance = np.vectorize(distance,otypes=[np.float])
我有一个名为spiral的熊猫数组,它包含了不规则螺旋上的一些点。这只熊猫有三个字段(除其他外):spiral.t , spiral.x, spiral.y,其中t是一个时间上的递增值,x,y是笛卡尔平面上的螺旋坐标(rect坐标)。
因此,对于每一对spiral.x,spiral.y,我都有一个对应的spiral.t。
我可以很容易地计算出从螺旋线上的每一点到开始时定义的直线的距离。
distance(spiral.x, spiral.y, m, b)
因为是熊猫,所以当我给spiral.x打电话时,我得到了整个专栏。因此,我做到了:
x0 = np.array(spiral.x)
y0 = np.array(spiral.y)
dist=vdistance(x0,y0,m,b)我有一个具有所有距离的np.array dist。这样,我就可以得到indexes <= K,其中K对我来说是一个合理的距离,足够接近行(在本例中是250):
near = np.where(dist <= 250)现在,对于附近的每一个值,我可以在螺旋线上迭代,检索正确的ts。(因为t不以相同的速度增长)。
ts=[]
for i in near:
ts += [ spiral.t[i] ]我的问题是,这是如何在一次与熊猫拍摄?
发布于 2016-06-28 00:06:11
您可以使用df.apply()迭代行并访问函数的多个列。
df[df.apply(distance, axis=1)]
这里的axis=1告诉apply对行进行迭代。df.apply()将在列上迭代,如果是axis=0。该语句的结果是一个dataframe,它是df的一个子集,行数较少。
要使此工作,您的distance函数应该返回一个布尔值。这一职能的逻辑可以是:
def distance(row):
dist = compute_dist(row['x'], row['y'])
if dist < 250:
return True
return Falsehttps://stackoverflow.com/questions/38064793
复制相似问题