Как бы я масштабировал 2-мерный массив в Python? - PullRequest
4 голосов
/ 15 декабря 2010

Я не уверен, что делать с масштабированием двумерного массива. Учитывая массив ниже, размеры которого 8x10, скажем, мне нужно было увеличить его до 5x6 - я искал конкретные примеры в Википедии, но без особых оснований в математике я немного растерялся. Если бы кто-то мог указать мне правильное направление, я был бы очень благодарен!

[
 [0, 0, 1, 1, 1, 1, 0, 0],
 [0, 1, 1, 1, 1, 1, 1, 0],
 [0, 1, 0, 0, 0, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 1, 1],
 [0, 0, 1, 1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1, 1, 1, 1],
 [1, 1, 0, 0, 0, 0, 1, 1],
 [1, 1, 0, 0, 0, 1, 1, 1],
 [1, 1, 1, 1, 1, 1, 1, 1],
 [0, 1, 1, 1, 1, 0, 1, 1]
]

Ответы [ 2 ]

10 голосов
/ 15 декабря 2010

Поскольку ваш массив выглядит как двоичное изображение строчной буквы «а», я предполагаю, что вы имеете в виду масштабирование в смысле изображения.

Для этого я бы порекомендовал использоватьimresize функция в scipy.misc (по-моему, взята из PIL).Вот пример:

import numpy as np
from scipy.misc import imresize

img = np.array([
 [0, 0, 1, 1, 1, 1, 0, 0],
 [0, 1, 1, 1, 1, 1, 1, 0],
 [0, 1, 0, 0, 0, 1, 1, 1],
 [0, 0, 0, 0, 0, 0, 1, 1],
 [0, 0, 1, 1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1, 1, 1, 1],
 [1, 1, 0, 0, 0, 0, 1, 1],
 [1, 1, 0, 0, 0, 1, 1, 1],
 [1, 1, 1, 1, 1, 1, 1, 1],
 [0, 1, 1, 1, 1, 0, 1, 1]
])
newimg = imresize(img, (6,5))

, а newimg равен

array([[  0,   0, 255, 255,   0],
       [  0, 255, 255, 255, 255],
       [  0,   0,   0,   0, 255],
       [255, 255, 255, 255, 255],
       [255, 255,   0,   0, 255],
       [255, 255, 255, 255, 255]], dtype=uint8)

, что не идеально, но вы можете легко изменить 255 на 1.Кроме того, если вы получаете версию Scipy для разработки, в настоящее время версию 9, то у вас есть некоторые другие параметры (прокрутите вниз, чтобы изменить размер - без привязки), которые можно ввести для увеличения, например метод интерполяции и режим PIL.

2 голосов
/ 15 декабря 2010

Если сомневаетесь, используйте библиотеку!

PIL имеет функции для изменения размера изображений, предполагая, что это тот тип масштабирования, который вам нужен. Чтобы преобразовать ваш список списков в изображение PIL, сначала преобразуйте его в массив numpy, , затем в формат PIL . После того, как вы закончите, вы можете отменить процесс, чтобы снова получить список списков (если вы действительно хотите).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...