首页 > 解决方案 > Numpy:从另一个矩阵创建块矩阵的函数,每个块应该包含来自另一个矩阵的相同索引的值

问题描述

我正在寻找一些快速函数来从另一个矩阵中创建矩阵中的块,例如在图片中(底部矩阵是结果): 矩阵

我还编写了一些代码来执行此操作,但对于许多矩阵来说工作缓慢。

import numpy as np
im1 = np.array([[1, 2], [3, 4]])
im2 = np.array([[5, 6], [7, 8]])
im3 = np.array([[9, 10], [11, 12]])
im4 = np.array([[13, 14], [15, 15]])
arrays = [im1, im2, im3, im4]


def array_rearrangement(arrays):
    num = int(len(arrays) ** 0.5)
    size = arrays[0].shape[0] * num

    result = np.zeros((size, size))
    k = -1
    p = -1
    for k1 in range(num * num):
        if k1 % num == 0:
            k = 0
        if k1 % num == 0:
            p += 1
        im = arrays[k1]
        for i in range(num):
            for j in range(num):
                x_index = i * num + p
                y_index = j * num + k
                result[x_index, y_index] = im[i, j]

        k += 1

    print(result)


array_rearrangement(arrays)

标签: pythonnumpymatrix

解决方案


这个答案nd始终是nd转型的良好起点。在您的情况下,这是一个reshape,swapaxesreshape再次。


arr = np.column_stack(arrays)
arr.reshape(-1, 2, 2).swapaxes(2, 1).reshape(4, 4)

array([[ 1,  5,  2,  6],
       [ 9, 13, 10, 14],
       [ 3,  7,  4,  8],
       [11, 15, 12, 15]])

推荐阅读