mx+b
で定義された行があります。m,b
はnp.linalg.lstsq
から取得された変数です。関数出力に基づく条件に一致するpandas行だけを一覧表示する
はまたように規定された距離と呼ばれる関数作成した:私はのようにベクトル形式を作成している便宜上
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])
Iが含まspiral
と呼ばれるパンダ配列を有します不規則な螺旋の上にポイントの束。このパンダのデータフレームには、spiral.t , spiral.x, spiral.y
という3つのフィールドがあり、t
は時間とともに増加し、x,y
はデカルト平面上の螺旋の座標(矩形座標)です。
したがって、spiral.x,spiral.y
の各ペアには、対応者spiral.t
があります。
私は列全体を持っspiral.x
を呼び出すパンダのデータフレームであるので、私は簡単
distance(spiral.x, spiral.y, m, b)
で開始上に定義され、その行に螺旋上の各点からの距離を計算することができます。そこに私はした:
x0 = np.array(spiral.x)
y0 = np.array(spiral.y)
dist=vdistance(x0,y0,m,b)
私はすべての距離でnp.array dist
を持っています。
near = np.where(dist <= 250)
そして今:それで私はK
がラインに十分に近く、私には合理的な距離であるindexes <= K
、(この場合は250で)を得ることができます正しいt
を取得します。 (なぜなら、tは同じ割合で成長しないからです)。
ts=[]
for i in near:
ts += [ spiral.t[i] ]
私の質問は、パンダのワンショットでこれをどうやって行うのですか?
玉I.がパンダ認識している 'distance'関数を作成した
'その戻りABS(傾斜*行[「X」] - 行[「Y」] + yintercept )/(勾配** 2 + 1)**。これで私は今、 'spiral ['distance'] = spiral.apply(distance、args =(m、b)、axis = 1)'と呼んでいます。私は非常に古いバージョンのpandas(0.8.0)を実行しているので(私は更新できません)。 where節を実行する方法を探しています。なぜならpandas 0.8.0ではどこに実装されていないからですか。 – Lin私は 'spiral ['distance'] <250'を走らせることができ、それは私に' pandas 'を返します。Series 'を 'index Bool'と一緒に使用していますが、' pandas.DataFrame.loc'も '0.8.0'では実装されていないので、既存のデータフレームにどのように適用するのか分かりません。 – Lin
'spiral [spiral.distance <250]'は、私に必要なデータの "ビュー"を返します。 – Lin