【问题标题】:How would I scale a 2-dimensional array in python?如何在 python 中缩放二维数组?
【发布时间】:2011-05-25 17:51:43
【问题描述】:

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

【问题讨论】:

  • 当你说规模时,你到底是什么意思?把它当成图片?
  • 缩放对于矩阵有特定的含义(即,它是一种特殊的仿射变换),它不会改变矩阵的大小。因此我猜你在这里指的是别的东西,但不清楚那是什么。
  • 嗯,把它当成一张照片。我认为这就是我寻找解决方案的问题的根源,因为矩阵变换似乎有点不同。我想在某种意义上“保留”其中包含的数据,同时任意缩小或放大

标签: python matrix


【解决方案1】:

如有疑问,请使用库!

PIL 具有调整图像大小的功能,假设这是您所追求的缩放类型。要将列表列表转换为 PIL 图像,首先将其转换为 numpy 数组 then to PIL format。完成后,您可以反转该过程以再次获取列表列表(如果您真的需要)。

【讨论】:

    【解决方案2】:

    由于您的数组看起来像是小写“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 - 没有锚点),你可以输入到 imresize,例如插值方法和 PIL 模式。

    【讨论】:

    • 为什么在直接使用 PIL 时使用 scipy 更有意义?
    • 哇,我完全认为直接使用 PIL 会很麻烦,但也许这是最好的方法
    • @martineau,也许是因为你想在 scipy 中使用结果?无论如何,这是我的想法。
    猜你喜欢
    • 2019-11-09
    • 2018-09-12
    • 2016-02-25
    • 2020-12-04
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多