我在python中初始化数组时遇到问题。我一直试图寻找解决方案,但我没有找到任何东西。 (可能是我搜索了错误的关键字)。 无论如何,这正是我想要实现的目标: 我正在为机器视觉应用程序编写一个python脚本。该应用程序由几个“工具”组成,这些“工具”按其有序顺序迭代运行。我作为python脚本编写的这些工具之一。在这个脚本中,我需要创建一个数组类型变量,每次迭代都会删除第一个值,并在最后添加一个新值。因为它需要记住迭代之间的数组,它必须是全局的吗? 问题是我需要在脚本开头将变量定义为数组。为此,我使用: xPosition_array = [] 稍后在脚本中,我追加一个值。但是,下一次迭代 xPosition_array = [] 将用空的数据覆盖该数组。 如何创建代码使得数组只定义/初始化一次(第一次迭代)?
提前致谢。
代码:
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 :(得分:0)
如果在函数中编写整个工具,可以调用该函数并将数组作为参数传递。
^)
每次要使用该工具时,只需调用该函数即可。
我不确定你在这里想要达到的目标,所以希望这会有所帮助。
答案 1 :(得分: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?以进一步检查变量。