假设我们有以下矩阵/图像:
x = array([[1, 0, 1],
[0, 1, 0],
[1, 0, 1]])
我想得到的是一个9x9矩阵,它是上面的3倍放大版本,左上角有3x3个,中间顶部有3x3个,等等。
我已经尝试过的事情是:
scipy.ndimage.interpolation.zoom (x,3,order =(anything)),例如order = 0返回:
array([[1, 1, 0, 0, 0, 0, 1, 1, 1],
[1, 1, 0, 0, 0, 0, 1, 1, 1],
[0, 0, 1, 1, 1, 1, 0, 0, 0],
[0, 0, 1, 1, 1, 1, 0, 0, 0],
[0, 0, 1, 1, 1, 1, 0, 0, 0],
[0, 0, 1, 1, 1, 1, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 1, 1, 1],
[1, 1, 0, 0, 0, 0, 1, 1, 1],
[1, 1, 0, 0, 0, 0, 1, 1, 1]])
scipy.misc.imresize (x,(9,9),interp =“nearest”)(实际上来自PIL),它提出了一个不同的创意(但错误的)解决方案。< / p>
同时,MATLAB imresize完美地解决了这个问题......
有什么想法吗? (注意:所有这些解决方案都应该有效,所以在提交之前,请尝试一下:))
答案 0 :(得分:5)
Kronecker产品:
numpy.kron(x,numpy.ones((3,3)))
结果:
array([[ 1., 1., 1., 0., 0., 0., 1., 1., 1.],
[ 1., 1., 1., 0., 0., 0., 1., 1., 1.],
[ 1., 1., 1., 0., 0., 0., 1., 1., 1.],
[ 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 1., 1., 1., 0., 0., 0., 1., 1., 1.],
[ 1., 1., 1., 0., 0., 0., 1., 1., 1.],
[ 1., 1., 1., 0., 0., 0., 1., 1., 1.]])