pandas DataFrame からのデータを処理するためのパーティクル フィルターを作成しています。フィルターの背後にある考え方は、反復して最良の結果を推定することです (モンテカルロに似ています)。データなどを収集するための基本的なメソッドを持つ基本クラスExperimentalData()
があります。さまざまなフィルターを持つ別のクラスを構築します。フィルタのクラスは常に から派生しExperimentalData()
ます。
内部には、フィルターを実行して目的の見積もりを取得するclass ParFilter(ExperimentalData)
メソッドがあります。def particleFilter(self, N=1000)
反復中にデータにアクセスする必要があるため、内部でデータを処理するclass Iterator(object)
場所を構築します。
class にデータを渡す際に問題がありますIterator()
。私はほとんどの場合、うまくいくはずだと思っていましたが、うまくいきませんでしたAttributeError: 'Iterator' object has no attribute 'myData'
。最終的に、いくつかのデータを渡すことができますが、それは私が期待したのと同じデータ オブジェクトではありません。
私のコードは、例を説明するために削減されました:
import numpy as np
import pandas as pd
class ExperimentalData(object):
def __init__(self):
self.xTrueSource = 100
self.yTrueSource = -7
print 'source %s %s' % (self.xTrueSource,self.yTrueSource)
xSampPoints = np.arange(0,200)
yTrueSignal = 100/(np.sqrt((self.xTrueSource - xSampPoints)**2 + (self.yTrueSource)**2))
ySampPoints = yTrueSignal+np.random.randn(200)
self.myData = pd.DataFrame({'x':xSampPoints,'ySamp':ySampPoints,'yTrue':yTrueSignal})
#print self.myData
def __str__(self, rows=2):
dfPrintStart = (self.myData[:rows]).to_string()
dfPrintEnd =(self.myData[-rows:]).to_string()
stringToPrint='\nPRINTNG INITIAL DATAFRAME FIRST %d ROWS and LAST %d ROWS \n %s\n...\n%s\n'\
% (rows, rows, dfPrintStart, dfPrintEnd)
return stringToPrint
class ParFilter(ExperimentalData):
def particleFilter(self, N=1000):
'''function runs particle filter'''
class Iterator(object):
def __init__(self):
'''initialise all values for iteration'''
self.iteration = 0
frameToWork = ParFilter().myData
print 'FROM CLASS Iterator.__init__ \n%s' % frameToWork
def iterate(self):
'''performing one step at the time'''
self.iteration += 1
print self.iteration
myPartFilter = Iterator()
for n in range(N):
myPartFilter.iterate()
return myPartFilter
if __name__ == '__main__':
data = ParFilter()
print data
data.particleFilter(10)
問題は、クラスを初期化するときに特定の値を持つデータフレームがあることですが、ステップを実行するframeToWork = ParFilter().myData
と、同じデータオブジェクトを取得する代わりに、異なるデータを持つ新しいオブジェクトを生成することです。出力のスナップショット:
PRINTNG INITIAL DATAFRAME FIRST 2 ROWS and LAST 2 ROWS
x ySamp yTrue
0 0 0.510414 0.997559
1 1 1.522934 1.007585
...
x ySamp yTrue
198 198 1.508216 1.017815
199 199 2.409181 1.007585
FROM CLASS Iterator.__init__
x ySamp yTrue
0 0 0.727060 0.997559
1 1 0.631976 1.007585
初期化中の最初の値ySamp
は 0.510414 であり、0.727060 ではなく同じである必要がありIterator
ます。だから私は新しいオブジェクトを作成します。
myData
元のオブジェクトを取得する方法がわかりませんIterator
:
class Iterator(ParFilter):
def __init__(self):
'''initialise all values for iteration'''
self.iteration = 0
frameToWork = self.myData
とAttributeError: 'Iterator' object has no attribute 'myData'
。
私は試してみます:class Iterator(self.ParFilter)
とAttributeError: 'ParFilter' object has no attribute 'ParFilter'
いくつかの結果がありますが、結果はありません。
(私の基本クラスは非常に大きく、例のように大きなデータフレームを取得していないため、パンダのデータフレームを使用する必要があります)