关于矩阵分辨率提升的最近邻插值验证及通用实现方法问询
矩阵分辨率提升的最近邻插值验证及通用实现方法问询
嘿,你的理解完全正确!你想要实现的这个操作确实就是最近邻插值(Nearest-neighbor interpolation)——它的核心逻辑就是把原数组里的每个元素直接复制扩展成指定大小的块,全程不做任何平滑或计算,完全贴合你给出的输出效果,这正是最近邻插值在矩阵放大场景下的典型表现。
你当前用的np.concat加np.repeat的组合确实能得到想要的结果,但确实有更简洁、通用的方法,适配任意维度和缩放倍数的矩阵,下面给你介绍几种常用方案:
两次
np.repeat实现(最直观通用)
假设你想把原数组的每个元素扩展成(row_scale, col_scale)的块(你的例子里是2x2),可以分别对行、列方向重复对应次数:import numpy as np arr = np.arange(4).reshape(2,2) # 先按行重复2次,再按列重复2次 expanded_arr = arr.repeat(2, axis=0).repeat(2, axis=1)运行后输出就是你想要的结果:
array([[0, 0, 1, 1], [0, 0, 1, 1], [2, 2, 3, 3], [2, 2, 3, 3]])这个方法适配任意维度的数组,比如3维数组想扩展的话,只需要再加一次
repeat并指定对应轴即可。用
np.kron(克罗内克积)快速实现
克罗内克积可以直接把原数组和一个全1的目标块矩阵相乘,一步完成扩展:expanded_arr = np.kron(arr, np.ones((2,2), dtype=int))代码更简洁,效果和上面的repeat方法完全一致,适合快速写原型的时候用。
用
scipy.ndimage.zoom支持非整数缩放
如果你的需求不是整数倍放大(比如想把2x2数组放大到5x5),或者想要更标准化的插值接口,可以用scipy的zoom函数,指定mode='nearest'来保持最近邻逻辑:from scipy.ndimage import zoom # 参数是每个维度的缩放倍数,这里行和列都放大2倍 expanded_arr = zoom(arr, (2,2), mode='nearest')这个方法的优势是支持非整数比例的缩放,适用性更广。
备注:内容来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

