Как пропорционально увеличить матрицу?

Имеется матрица следующего вида:

|0 0 1 0 0 |
|0 1 1 1 0 |
|0 0 1 0 0 |

Как её пропорционально растягивать? Например увеличить в 10 раз?


Ответы (1 шт):

Автор решения: CrazyElf

Не знаю, есть ли в Numpy готовый метод (наверняка есть, но я такого не помню), но если "вручную" сделать, то всё просто:

  • создаём новую матрицу нужного размера
  • проходим по её ячейкам и кладём в них элементы из исходной матрицы с координатами, полученными из координат в новой матрице путём деления на коэффициент "раздувания" матрицы

Для примера я взял увеличение в 2 раза, чтобы можно было нормально получающуюся матрицу напечатать:

import numpy as np

arr = np.array(
    [[0, 0, 1, 0, 0],
     [0, 1, 1, 1, 0],
     [0, 0, 1, 0, 0]])
k = 2
new_arr = np.zeros((arr.shape[0]*k, arr.shape[1]*k), arr.dtype)
for i in range(new_arr.shape[0]):
    for j in range(new_arr.shape[1]):
        new_arr[i,j] = arr[i//k,j//k]
new_arr

Вывод:

array([[0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
       [0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
       [0, 0, 0, 0, 1, 1, 0, 0, 0, 0]])
→ Ссылка