首页 > 解决方案 > 如何将二维数组与块大小连接起来

问题描述

我有以下二维数组,我想找到一种方法来生成另一个二维数组,但数据与块大小相连。

array_2d = [
[0,0,0,0,0,0,0,1],
[0,0,0,0,0,0,0,1],
[0,0,0,0,0,1,1,1],
[0,0,0,0,0,0,1,1],
[0,0,0,0,0,1,1,1]
]

例如,块大小为 2 时,上述二维数组将更改为:

array_2d = [
[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1],
[0,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1],
[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1]
]

请注意,最后一个元素已在左侧填充零。

感谢帮助。

标签: pythonarrays

解决方案


array_2d = [
[0,0,0,0,0,0,0,1],
[0,0,0,0,0,0,0,1],
[0,0,0,0,0,1,1,1],
[0,0,0,0,0,0,1,1],
[0,0,0,0,0,1,1,1]
]

def chunkconcat(chunk, init_data):
    data_arr = init_data
    # padding
    while (len(data_arr) % chunk) != 0:
        data_arr.append([0 for _ in range(len(data_arr[0]))])
    # division into smaller chunks
    divide_data = [data_arr[i*chunk:(i+1)*chunk] for i in range(int(len(data_arr)/chunk))]
    print(divide_data)
    new_arr = []
    # use the slices by reversing order and concatenating them
    for slice in divide_data:
        tmp = []
        for ind in range(chunk):
            tmp.append(slice[-1])
            slice.pop()
        new_arr.append(np.concatenate(tmp))

    final_data = np.array(new_arr)
    print(final_data)

chunkconcat(2, array_2d)

所以你也可以按照解决方案,在此基础上构建自己的解决方案,我明确地做到了。

基本上,您首先填充零向量,以便能够进行所需的转换/连接,或者您想调用它。

之后,您将数据集划分为所需块大小的较小部分。颠倒顺序并将其传递给临时列表使我们能够正确地获得顺序并将它们连接起来,然后我们将结果添加到最终列表(“矩阵”)中。

在最后一步将其转换为 numpy 数组以获得实数矩阵。

使用预定义的函数和列表推导,您可以在几行内解决这个问题,但我猜这对您没有太大帮助。

小心。


推荐阅读