2017-03-25 39 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 

每次你想使用该工具,只需调用该函数即可。

我不完全确定你想在这里实现什么,所以希望这是有帮助的。