我有几个数组要初始化。我想循环遍历每个数组,这样数组就不包含任何数据,它可以通过某种方法进行初始化,但如果它确实包含数据,则会通过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
是如何引用这三个数组的。有人知道我要做什么吗?当然,我可以展开内部循环,但这看起来非常“不和谐”。你知道吗
除非通过堆叠连接数组是一种糟糕的方法,否则您可能需要修复代码中的名称绑定问题。你知道吗
问题是
arr
一个接一个地引用(绑定到)数组(正如您所期望的那样)。然后它被np.stack((arr, new_arr))
或np.array(new_arr)
替换,这两个都返回新的数组。名称arr
绑定到新引用,而不是a
或b
或c
。你知道吗一个直接的解决方案是创建数组列表,而不是使用
a
、b
、c
。像这样做这里有几个主要的缺陷。首先,您不应该将
try...except
用于如此简单的事情。另一方面,如果必须将数组堆叠在一起,请尝试一次完成所有操作,而不是进行增量重新分配。你知道吗而且,您的代码似乎在
while True:
循环中一次又一次地在同一组数组上循环。你知道吗相关问题 更多 >
编程相关推荐