将 100 个 2D 阵列合并为一个 3D 阵列

数据挖掘 Python 麻木的
2022-03-03 17:45:09

我有 100 个二维列表 a0 到 a99,很容易将它们转换为数组(我已经验证过):

print(np.array(a0).shape)   # (2,150)
print(np.array(a1).shape)   # (5,150)
print(np.array(a2).shape)   # (10, 150)
# the sizes of a0 to a99 vary from (1,150) to (10, 150) only

我想将这 100 个 3D 数组组合成一个 3D 数组,例如combine_array

print(combined_array.shape)  # (100,10,150)
print(combined_array[0].shape) # (2,150)
print(conbined_array[1].shape) # (5,150)
print(combined_array[2].shape) # (10,150)

我使用 Python 3.7。

1个回答

您的数组在 0 轴上有不同的形状,因此您不能numpy.stack直接使用。

您可以使用填充或将所有数组放在一个列表中。使用填充:

import numpy as np

a0 = np.empty((2,150))
a1 = np.empty((5,150))
a2 = np.empty((10,150))

max_shape = [0,0]
for a in [a0, a1, a2]:
    if max_shape[0] < a.shape[0]:
        max_shape[0] = a.shape[0]
    if max_shape[1] < a.shape[1]:
        max_shape[1] = a.shape[1]
arrays = []
for a in [a0, a1, a2]:
    arrays.append(np.pad(a, pad_width=((0, max_shape[0] - a.shape[0]),
                                       (0, max_shape[1] - a.shape[1])),
                         mode='constant'))
stacked_array = np.stack(arrays)