【问题标题】:Adding 3D array to 4D array将 3D 数组添加到 4D 数组
【发布时间】:2019-01-08 10:48:43
【问题描述】:

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

有一个函数返回一个新的但不同的数组(总是大小相同,例如 3000x1000x500),我希望最终输出是一个 3000x1000x500xK*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])

提前致谢

【问题讨论】:

  • 最好将您的数组收集在一个列表中,然后进行连接。 np.stack 是一种方便的工具,可以将它们连接到新轴上。

标签: python arrays numpy multidimensional-array tensor


【解决方案1】:

在列表中收集数组:

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)

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

【讨论】:

  • 哈哈,我意识到直到 while 循环之后我才需要堆叠/组合数组。这使它变得微不足道。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 2021-08-06
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多