我如何在python中缩放二维数组?

时间:2010-12-15 06:37:36

标签: python matrix

我不确定如何缩放二维数组。鉴于下面的数组,其尺寸为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 个答案:

答案 0 :(得分:10)

由于你的数组看起来像是一个小写'a'字母的二进制图像,我猜你的意思是你在图像意义上缩放。

为此,我建议在scipy.misc中使用imresize函数(我相信它来自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),那么您可以输入some other parameters(向下滚动到imresize - 无锚点),可以输入到impresize,例如插值方法和PIL模式。

答案 1 :(得分:2)

如有疑问,请使用图书馆!

PIL具有调整图像大小的功能,假设您正在进行缩放。要将列表列表转换为PIL图像,请先将其转换为numpy数组then to PIL format。完成后,您可以反转该过程以再次获取列表列表(如果您确实需要)。