我有以下数组:
import numpy as np
a = np.array([[2, 3, 5],
[4, 6, 7],
[1, 5, 7]])
我想将它扩展到这个数组:
b = [[2 2 2 3 3 3 5 5 5]
[2 2 2 3 3 3 5 5 5]
[2 2 2 3 3 3 5 5 5]
[4 4 4 6 6 6 7 7 7]
[4 4 4 6 6 6 7 7 7]
[4 4 4 6 6 6 7 7 7]
[1 1 1 5 5 5 7 7 7]
[1 1 1 5 5 5 7 7 7]
[1 1 1 5 5 5 7 7 7]]
所以我使用以下命令:
import scipy.ndimage
b = scipy.ndimage.interpolation.zoom(a, 3, order=0)
基于此问题和答案Resampling a numpy array representing an image。
但是,我得到的是:
b = [[2 2 3 3 3 3 5 5 5]
[2 2 3 3 3 3 5 5 5]
[4 4 6 6 6 6 7 7 7]
[4 4 6 6 6 6 7 7 7]
[4 4 6 6 6 6 7 7 7]
[4 4 6 6 6 6 7 7 7]
[1 1 5 5 5 5 7 7 7]
[1 1 5 5 5 5 7 7 7]
[1 1 5 5 5 5 7 7 7]]
我希望扩展精确到3,或者缩放因子是什么,但是目前它对于数组的每个元素都是不同的。
有直接的方法吗?或者我应该用一些编码手动完成?
答案 0 :(得分:7)
也许有点晚了,但为了完整起见:Numpy Kron完美地完成了工作
>>> import numpy as np
>>> a = np.array([[2,3,5], [4,6,7], [1,5,7]])
>>> np.kron(a, np.ones((3,3)))
array([[ 2., 2., 2., 3., 3., 3., 5., 5., 5.],
[ 2., 2., 2., 3., 3., 3., 5., 5., 5.],
[ 2., 2., 2., 3., 3., 3., 5., 5., 5.],
[ 4., 4., 4., 6., 6., 6., 7., 7., 7.],
[ 4., 4., 4., 6., 6., 6., 7., 7., 7.],
[ 4., 4., 4., 6., 6., 6., 7., 7., 7.],
[ 1., 1., 1., 5., 5., 5., 7., 7., 7.],
[ 1., 1., 1., 5., 5., 5., 7., 7., 7.],
[ 1., 1., 1., 5., 5., 5., 7., 7., 7.]])
答案 1 :(得分:1)
我不知道在NumPy或SciPy中是否有一个完全符合你想要的功能但是你自己很容易创建一个:
from __future__ import division
import numpy as np
def zoom(a, factor):
a = np.asarray(a)
slices = [slice(0, old, 1/factor) for old in a.shape]
idxs = (np.mgrid[slices]).astype('i')
return a[tuple(idxs)]
它给出了预期的结果:
>>> a = [[2,3,5], [4,6,7], [1,5,7]]
>>> zoom(a,3)
array([[2, 2, 2, 3, 3, 3, 5, 5, 5],
[2, 2, 2, 3, 3, 3, 5, 5, 5],
[2, 2, 2, 3, 3, 3, 5, 5, 5],
[4, 4, 4, 6, 6, 6, 7, 7, 7],
[4, 4, 4, 6, 6, 6, 7, 7, 7],
[4, 4, 4, 6, 6, 6, 7, 7, 7],
[1, 1, 1, 5, 5, 5, 7, 7, 7],
[1, 1, 1, 5, 5, 5, 7, 7, 7],
[1, 1, 1, 5, 5, 5, 7, 7, 7]])
我没有对所有因素和形状进行测试,也许这种方法可能因为浮点精度(切片中的步骤参数)而出现问题。