我想要初始化几个数组。我想循环遍历每个数组,以便数组不保存数据,它通过某种方法初始化,但如果它确实保存数据,则通过numpy.stack
将新数据添加到其中。我试过这个:
a = np.array(0)
b = np.array(0)
c = np.array(0)
while True:
data_set_num = infile.readline()
if not data_set_num: break
for arr in (a, b, c):
new_arr = get_new_array(infile)
try:
arr = np.stack((arr, new_arr))
except:
arr = np.array(new_arr)
但是在执行循环后,我什么都没有:
>>> a.shape
()
b
和c
相同。显然,我不明白arr
如何引用三个数组。任何人都知道如何做我想做的事情?当然,我可以展开内循环,但这看起来非常“单调”。
答案 0 :(得分:1)
除非通过堆叠连接数组是一种可怕的方法,您可以在代码中修复名称绑定问题。
问题是arr
逐个引用(绑定)数组(正如您所期望的那样)。然后它被np.stack((arr, new_arr))
或np.array(new_arr)
取代,两者都返回新数组。名称arr
绑定到新引用,而不是a
或b
或c
。
直接解决方案是制作数组列表,而不是使用a
,b
,c
。做点什么
x = [np.array(0) for _ in range(3)]
while True:
data_set_num = infile.readline()
if not data_set_num:
break
for ind, arr in enumerate(x):
new_arr = get_new_array(infile)
try:
x[ind] = np.stack((arr, new_arr))
except:
x[ind] = np.array(new_arr)
这里有几个主要缺陷。首先,您不应该使用try...except
这么简单的事情。另一方面,如果必须将数组堆叠在一起,请尝试一次完成所有操作,而不是进行增量重新分配。
此外,您的代码似乎在while True:
循环中反复循环遍历同一组数组。
答案 1 :(得分:1)
import numpy as np
arrays = []
while True:
#data_set_num = infile.readline()
#if not data_set_num: break
arr = np.array(0)
for count in range(3):
#new_arr = get_new_array(infile)
new_arr = np.array([[count+1,count+2],[count+3,count+4]])
try:
arrays.append(np.stack((arr, new_arr)))
except:
arrays.append(np.array(new_arr))
break
print str(arrays[0])
print str(arrays[1])
print str(arrays[2])