gpt4 book ai didi

python - numpy,连接或初始化之间的循环选择

转载 作者:行者123 更新时间:2023-12-01 03:47:20 25 4
gpt4 key购买 nike

我有几个想要初始化的数组。我想循环遍历每个数组,以便数组不包含数据,它会通过某种方法进行初始化,但如果它确实包含数据,则会通过 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
()

对于bc也是如此。显然我不明白 arr 如何引用这三个数组。有人知道如何做我想做的事吗?当然,我可以展开内部循环,但这看起来非常“unpythonic”。

最佳答案

除非通过堆栈连接数组是一种糟糕的方法,否则您可能需要修复代码中的名称绑定(bind)问题。

问题是 arr 一对一地引用(绑定(bind)到)数组(如您所料)。然后它被 np.stack((arr, new_arr))np.array(new_arr) 取代,两者都返回新数组。名称 arr 绑定(bind)到新引用,而不是 abc

直接的解决方案是创建一个数组列表,而不是使用 abc。做类似的事情

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: 循环中一遍又一遍地循环访问同一组数组。

关于python - numpy,连接或初始化之间的循环选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38776473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com