Как пропорционально увеличить матрицу?
Имеется матрица следующего вида:
|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]])