2017-03-25 84 views
0

我在使用python初始化數組時遇到了問題。我一直在試圖尋找解決方案,但我沒有找到任何東西。 (可能是我搜索了錯誤的關鍵字)。 無論如何,這是我想要實現的: 我正在爲機器視覺應用程序編寫一個python腳本。該應用程序由幾個「工具」組成,它們按照其有序順序迭代運行。我正在編寫的一個Python腳本。在這個腳本中,我需要創建一個數組類型變量,每次迭代都會刪除第一個值並在最後附加一個新值。由於它需要記住迭代之間的數組,它是否必須是全局的? 問題是我需要在腳本的開頭將變量定義爲數組。爲此,我使用: 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 

每次你想使用該工具,只需調用該函數即可。

我不完全確定你想在這裏實現什麼,所以希望這是有幫助的。