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

时间:2016-08-04 20:03:15

标签: python arrays numpy

我想要初始化几个数组。我想循环遍历每个数组,以便数组不保存数据,它通过某种方法初始化,但如果它确实保存数据,则通过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如何引用三个数组。任何人都知道如何做我想做的事情?当然,我可以展开内循环,但这看起来非常“单调”。

2 个答案:

答案 0 :(得分:1)

除非通过堆叠连接数组是一种可怕的方法,您可以在代码中修复名称绑定问题。

问题是arr逐个引用(绑定)数组(正如您所期望的那样)。然后它被np.stack((arr, new_arr))np.array(new_arr)取代,两者都返回新数组。名称arr绑定到新引用,而不是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:循环中反复循环遍历同一组数组。

答案 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])