2017-03-25 6 views
0

pythonで配列を初期化する際に問題があります。私は解決策を探していましたが、何も見つけられませんでした。 (私は間違ったキーワードを検索した可能性があります)。 私はマシンビジョンアプリケーション用のPythonスクリプトを書いています。このアプリケーションは、順序付けられた順序で繰り返し実行されるいくつかの「ツール」で構成されています。私がPythonスクリプトとして書いているこれらのツールの1つ。このスクリプトでは、配列型変数を作成する必要があります。各繰り返しで最初の値が削除され、最後に新しい値が追加されます。イテレーション間の配列を覚えておく必要があるので、グローバルでなければならないのでしょうか? 問題は、スクリプトの先頭に変数を配列として定義する必要があることです。このため、私は次のものを使用します: xPosition_array = [] 後でスクリプトに値を追加します。しかし、次の反復 xPosition_array = [] は空の配列で配列を上書きします。 配列が一度だけ定義され/初期化されるようなコードを作成するにはどうすればよいですか(最初の反復)?pythonscript、各イテレーションの配列と値の初期化

ありがとうございます。

コード:

global xPosition_array 
xPosition_array = [] 
filter_win_len = 40 

def moving_average(a, n) : 
    ret = np.cumsum(a, dtype=float) 
    ret[n:] = ret[n:] - ret[:-n] 
    return ret[n - 1:]/n 

xPosition = GetValue('LocatexPos.Line[1]_q_x') 

if len(xPosition_array) < filter_win_len: 
xPosition_array.append(xPosition) 
elif len(xPosition_array) == filter_win_len: 
xPosition_array.pop(0) 
xPosition_array.append(xPosition) 

xPosition_filtered = moving_average(xPosition_array, filter_win_len) 

答えて

0

あなたは、配列のあなたの初期化のためにこれを試みることができる:

global xPosition_array 

if 'xPosition_array' in globals(): 
    pass 
else: 
    xPosition_array=[] 

あなたがさらなる反復を行ったときに、あなたは以下を得る:

global xPosition_array 

#First Iteration: 

if 'xPosition_array' in globals(): 
    pass 
else: 
    xPosition_array=[] 

print("First Iteration: ", xPosition_array) 

#Set Variable after First Iteration: 
xPosition_array=[0,1,2] 

#Second Iteration: 

if 'xPosition_array' in globals(): 
    pass 
else: 
    xPosition_array=[] 

print("Second Iteration: ", xPosition_array) 

出力:

First Iteration: [] 
Second Iteration: [0, 1, 2] 

を次にまだ定義されていない場合に限り空の配列として設定する必要があります。 xPosition_arrayがメイン関数でツールを繰り返し呼び出すことができると仮定します。変数の詳細なチェックについては、この回答を参照してください:How do I check if a variable exists?

+0

テイラーの返信をありがとう!あなたの提案したソリューションは、私が探していたものとまったく同じです。 – John

+0

問題ありませんジョン、私は助けることができてうれしい! –

0

あなたが機能で全体のツールを記述する場合、関数を呼び出すと、引数として配列を渡すことができます。

xPosition_array = [] 

def my_tool(xPosition_array): 
    # do stuff 

ツールを使用するたびに、関数を呼び出すだけです。

私はあなたがここで達成しようとしていることを正確には分からないので、これが役立つことを願っています。