numpy.resize和numpy.reshape函数如何在python中内部工作?

时间:2016-12-15 18:32:42

标签: python numpy image-processing

在numpy包中,它们是两个函数调整大小并重新整形。内部如何运作?他们使用什么样的插值?我查看了代码,但没有得到它。谁能帮我吗。或者如何调整图像大小。它的像素会发生什么?

2 个答案:

答案 0 :(得分:6)

都没有插值。如果您想知道图像的插值和像素,它们可能不是您想要的功能。有一些image个包(例如scipy个)可以处理图像的分辨率。

每个numpy数组都有shape个属性。 reshape只是改变了这一点,而根本不改变数据。新形状必须引用与原始形状相同的元素总数。

 x = np.arange(12)
 x.reshape(3,4)    # 12 elements
 x.reshape(6,2)    # still 12
 x.reshape(6,4)    # error

np.resize不太常用,但是用Python编写并可供学习。您必须阅读其文档,x.resize是不同的。越大,它实际上会用零重复值或填充。

在1d中调整大小的例子:

In [366]: x=np.arange(12)
In [367]: np.resize(x,6)
Out[367]: array([0, 1, 2, 3, 4, 5])
In [368]: np.resize(x,24)
Out[368]: 
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11,  0,  1,  2,  3,  4,
        5,  6,  7,  8,  9, 10, 11])
In [369]: x.resize(24)
In [370]: x
Out[370]: 
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11,  0,  0,  0,  0,  0,
        0,  0,  0,  0,  0,  0,  0])

最近有关scipy.misc.imresize的问题。它还引用了scipy.ndimage.zoom

Broadcasting error when vectorizing misc.imresize()

答案 1 :(得分:2)

据我所知numpy.reshape()只是重塑一个矩阵(如果是图像则无关紧要)。它不进行任何插值,只是操纵矩阵中的项目。

a = np.arange(12).reshape((2,6))


a= [[ 0  1  2  3  4  5]
   [ 6  7  8  9 10 11]]


b=a.reshape((4,3))

b=[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]
  [ 9 10 11]]