Python 如何将数组附加到更大的数组

Python 如何将数组附加到更大的数组,python,python-3.x,numpy,Python,Python 3.x,Numpy,编辑:对不起,让我尝试添加一些澄清。 我有一个python代码: E1 = [1,2,3,4] E2 = [2,3,4,5] #E3 = [...] and so on arraylist = [] for i in range(1,acq+1): dat = "E{}".format(i) arraylist.append(dat) E_total = np.add.reduce([arraylist]) 我想附加以前定义的数组E1、E2、E3。。。进入array

编辑:对不起,让我尝试添加一些澄清。 我有一个python代码:


E1 = [1,2,3,4]
E2 = [2,3,4,5]
#E3 = [...] and so on

arraylist = []

for i in range(1,acq+1):
    dat = "E{}".format(i)
    arraylist.append(dat)

E_total  = np.add.reduce([arraylist])

我想附加以前定义的数组E1、E2、E3。。。进入arraylist,这样print(arraylist)将返回[E1、E2、E3,…]

现在,当我打印数组列表时,它看起来像[“E1”、“E2”、“E3”]。 当我尝试对数组求和以求解E_total时,我得到一个错误,因为E1没有调用我的数组E1=[1,2,3,4],它调用的是没有定义的字符串“E1”

我希望arraylist=[E1,E2,E3,…],而不是附加字符串“E1”“E2”…

当我打印(arraylist[0])时,它返回E1,我希望它返回[1,2,3,4],因为这就是E1的定义。

没有字典我能做这件事吗?我不想定义“E1”:E1,“E2”:E2等等。这似乎非常庞大,对许多E的不可行

更新 手工打字:

arraylist = [E1,E2,E3,...] 
sums = np.add.reduce([arraylist]) 
工作! 我认为问题在于我将字符串“E1”附加到带有forloop的arraylist,而不是E1。如何使用.append以便可以追加E1而不是字符串“E1”

下面是我获取E_n阵列的方法:

A1 = glob.glob('/media...) 
A1.sort() 
B1 =[] 
for elem in A1: 
  B1.append(float((elem.split('_'))[3]))
C1 = [] 
for elem in A1: 
C1.append(np.sum(np.genfromtxt(elem)))
E1 = np.gradient(C1)


感谢您的帮助

这段代码将创建您想要的arraylist,但我会认真地重新考虑输入数据的组织方式(使用带有映射到数组的序列号键的dict或类似的东西)

这张照片是: [1,2,3,4],[2,3,4,5],[5,6,7,8]]

编辑:根据你更新的信息,我会像这样构建我的输入循环。这段代码并不完全正确(我不知道您的输入数据是什么样子或文件名),但应该让您了解如何循环处理这些数据(您将避免使用奇怪的动态命名数组的整个问题,也不需要构建所有那些奇怪的中间列表等等)

请注意,我可能在这里处理索引错误(我不确定您的文件名是什么样子的)。考虑使用< /P>
for i, input_file in enumerate(input_files):
   ....
   E[i] = input_grad

如果E中的行顺序对您来说无关紧要。

您正在尝试创建多维NumPy数组。我仍然不清楚您为什么要这样做,或者您的输入到底是什么样子的,但我认为最好与大家分享一个实际的解决方案

将numpy导入为np
E1=[1,2,3,4]
E2=[2,3,4,5]
E3=[5,6,7,8]
两维列表=[E1、E2、E3]
打印(两个尺寸列表)
arr=np.数组(两维列表)
打印(arr)
输出:

[[1,2,3,4],[2,3,4,5],[5,6,7,8]]
[[1 2 3 4]
[2 3 4 5]
[5 6 7 8]]

使用dictionary
d={“E1”:123,“E2”:987}
-然后你可以使用字符串来获取值-
d[“E1”]+d[“E2”]
你能澄清你的问题吗?我想要arraylist=[E1,E2,E3,…]但是现在我使用了一个forloop来填充字符串“E1”“E2”等等。我不想使用字典,因为这意味着我必须将每个“E1”设置为向量E1,依此类推。例如:E1=[1,2,3,4]。不清楚您试图实现什么。请提供更多详细信息。您将显示
E1
。。E2`是同一件事,但名称不同吗?为什么有不同的名字?通常在python中,我们在列表中收集内容,而不是按名称
e1、e2、e3,
是的,根据您在值数组中的加载方式,您也可以从一开始就创建一个2d numpy数组并直接调用np.add.reduce(无需创建arraylist或额外循环)。@Sav这根本不是最好的方法,他们甚至写道,我会认真重新考虑如何组织您的输入数据。@AMC我明白了。我只是担心使用字典,因为我以前没有使用过字典,而且只使用简单的np.array会舒服得多。因为有三位评论者说要使用字典,我会重写它。很高兴知道我可以强迫它与exec一起工作,但我会接受建议,并与dict一起重做。谢谢大家的帮助@Sav我不确定你是否需要一本字典,因为我不知道你想做什么。让我们从另一个角度来看,这些列表的用途是什么?你更广泛的目标是什么?@AMC(谢谢你花时间来帮助我,顺便说一句)我正在进行一个实验,输出n个文件。我对它们进行展平/处理,并将它们中的每一个放入一个数组E1=[…]E2=[…],表示n个E。我只想加上E1+E2+…+E_n获取E_总数。我的问题是有很多E,这就是为什么我尝试做for循环,这样我可以调用一个大的E数组(称为arraylist),这样我就可以np.add.reduce整个arraylist并找到E_total。我的最终结果是一个E_total数组,它和E_n数组一样长,由E_1…E_n元素逐元素求和组成。我想补充的是如何将E1,E2…E_n附加到两个维度列表中。当我使用“.append”时,它会把我搞砸,因为它只适用于列表(我想是吧?)
input_files = glob.glob('/media*') #or whatever the search is

number_of_cols = 4 # set this to whatever value it will be in the real data, should equal the length of your eventual gradient

E = np.empty([len(input_files), number_of_cols])

for input_file in input_files.sort():
    split_name = input_file.split('_')
    # Save this in an array B here if you want to
    index_val = split_name[3]-1 # Your file numbers seem to start at 1, while arrays are 0 indexed.
    # Save this into an array C if you want to
    summed_val = np.sum(np.genfromtxt(input_file))

    input_grad = np.gradient(summed_val)
    E[index_val] = input_grad
for i, input_file in enumerate(input_files):
   ....
   E[i] = input_grad