Numpy: функция для создания блочной матрицы из других матриц, каждый блок должен содержать значения из тех же индексов из других матриц - PullRequest
0 голосов
/ 07 октября 2019

Я ищу некоторую быструю функцию для создания блоков в матрице из других матриц, как на картинке (нижняя матрица - результат): матрица

Я также написал некоторый код для выполненияэто, но для многих матриц работает медленно.

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)

1 Ответ

0 голосов
/ 07 октября 2019

Этот ответ всегда является хорошей отправной точкой для преобразования nd в nd. В вашем случае это reshape, swapaxes и reshape снова.


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]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...