我有下面的数组:
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,或者不管放大倍数是多少,但是目前数组的每个元素都是不同的。
有没有直接的方法可以做到这一点?或者我应该手动做一些编码?
3条答案
按热度按时间n53p2ov01#
也许有点晚了,但为了完整起见:Numpy Kron完美地完成了这项工作
67up9zun2#
我不知道NumPy或SciPy中是否有一个函数能完全满足你的需求,但你自己创建一个很容易:
它给出了预期结果:
我还没有测试它的所有因素和形状,也许这种方法可能会有麻烦,因为浮点精度(在切片的步骤参数)。
bakd9h0s3#
下面是我的方法,它使用简单的numpy函数,返回与输入相同的dtype。