首页 > 解决方案 > 将具有不同形状的多个二维数组加载到三维上的新数组中

问题描述

我目前正在努力解决一个可能相当简单的问题,但我无法理解它。

假设我有以下两个不同形状的二维数组,我可以使用以下方法将它们组合成一个新数组:

a = np.zeros((2, 3))
b = np.zeros((4, 5))
c = np.array([a, b])

print(c.shape)
# Output 
# (2,)

for elements in c:
    print(elements.shape)
    # Output:
    # (2, 3)
    # (4, 5)

到目前为止,一切都很好!但是,如果我有一个必须迭代的大列表,我该怎么做呢?这是一个只有 4 个不同二维数组的简单示例:

这按预期工作:

a = np.zeros((2,3))
b = np.zeros((4,5))
c = np.zeros((6,7))
d = np.zeros((8,9))
e = np.array([a, b, c, d])
print(e.shape)

# Output
# (4,)

for elements in e:
    print(elements.shape)

# Output
# (2, 3)
# (4, 5)
# (6, 7)
# (8, 9)

这不能按预期工作,我的问题是如何以迭代的方式做到这一点:

a = np.zeros((2,3))
b = np.zeros((4,5))
c = np.zeros((6,7))
d = np.zeros((8,9))
e = None
for elements in [a, b, c, d]:
    e = np.array([e, elements])
    
print(e.shape)
# Output
# (2,) <--- This should be (4,) as in the upper example, but I don't know how to achieve that :-/
for elements in e:
    print(elements.shape)
    # (2,)
    # (8, 9)

我知道在每次迭代中我只是组合两个数组,为什么它总是保持在 (2,) 的形状,但我想知道如何以一种优雅的方式完成。所以基本上我想要一个第三维来说明存储的数组的数量或数量。例如,如果我迭代 1000 个不同的二维数组,我希望其形状为 (1000,)

希望我的问题是可以理解的——如果不告诉我!非常感谢!

标签: pythonarraysnumpy

解决方案


如果我正确理解了您的问题,您可以在列表理解中实现您想要的。这将产生与您描述为工作的上述代码完全相同的解决方案。

a = np.zeros((2,3))
b = np.zeros((4,5))
c = np.zeros((6,7))
d = np.zeros((8,9))

e = np.array([element for element in [a, b, c, d]])

print(e.shape)

for elements in e:
    print(elements.shape)

推荐阅读