Python 将三维阵列添加到4D阵列

Python 将三维阵列添加到4D阵列,python,arrays,numpy,multidimensional-array,tensor,Python,Arrays,Numpy,Multidimensional Array,Tensor,我的目标是拥有一个4D数组,其中第四维中的每个“值”k对应于第k个3D张量。我尝试了很多方法,但总是得到“所有的输入数组必须具有相同的维数” 有一个函数返回一个新但不同的数组(总是大小相同,例如3000x100x500),我希望最终输出是3000x100x500xk*n数组,其中n是退出while循环所需的重复次数。这就是我到目前为止所做的: tensors = [] K = 20 #arbitrary value while error > threshold: #arbitrary c

我的目标是拥有一个4D数组,其中第四维中的每个“值”k对应于第k个3D张量。我尝试了很多方法,但总是得到“所有的输入数组必须具有相同的维数”

有一个函数返回一个新但不同的数组(总是大小相同,例如3000x100x500),我希望最终输出是3000x100x500xk*n数组,其中n是退出while循环所需的重复次数。这就是我到目前为止所做的:

tensors = []
K = 20 #arbitrary value
while error > threshold: #arbitrary constraint 
    for _ in range(K): 
        new_tensor = function(var)
        stack = [tensors, new_tensor]
        tensors = np.concatenate([t[np.newaxis] for t in stack])

提前感谢您收集列表中的阵列:

In [54]: tensors = []
In [55]: for i in range(3):
    ...:     arr = np.ones((2,4))*i
    ...:     tensors.append(arr)
    ...: tensors

Out[55]: 
[array([[0., 0., 0., 0.],
        [0., 0., 0., 0.]]), array([[1., 1., 1., 1.],
        [1., 1., 1., 1.]]), array([[2., 2., 2., 2.],
        [2., 2., 2., 2.]])]
如果我按照您的描述进行操作,您希望在新的最终轴上加入阵列:

In [56]: np.stack(tensors, axis=2)
Out[56]: 
array([[[0., 1., 2.],
        [0., 1., 2.],
        [0., 1., 2.],
        [0., 1., 2.]],

       [[0., 1., 2.],
        [0., 1., 2.],
        [0., 1., 2.],
        [0., 1., 2.]]])
In [57]: _.shape
Out[57]: (2, 4, 3)

轴为0的
np.stack
np.array
的行为相同,将它们连接到一个新的初始轴上<代码>np。连接可用于连接现有轴。(
stack
使用
concatenate
,只需先为每个数组添加一个新维度。

最好将数组收集到一个列表中,然后进行一次连接。
np.stack
是一个方便的工具,可以将它们连接到一个新的轴上。哈哈,我意识到我不需要在while循环之后再对数组进行堆栈/组合。这使得它成为了一个新的工具艾菲尔,再次谢谢你