使用Numpy实现一维数组上采样:插入k-1个零的问题
解决numpy一维数组插入多个零实现上采样的报错问题
错误原因
当k=3时,你需要在原数组的4个元素间隙(len(A)-1=4)每个位置插入2个零,但原代码中values=np.zeros(k-1)是长度为2的数组,而np.insert默认每个索引位置仅插入1个元素,此时长度为2的values数组无法匹配4个索引位置的插入需求,导致形状不匹配报错。
解决方法1:构造重复插入索引
通过重复每个间隙的索引位置k-1次,同时构造对应长度的零数组,实现每个间隙插入k-1个零:
import numpy as np k = 3 A = np.array([1,2,3,4,5]) # 每个插入位置重复k-1次,比如原间隙位置1、2、3、4各重复2次,得到[1,1,2,2,3,3,4,4] insert_indices = np.repeat(np.arange(1, len(A)), k-1) # 生成对应长度的零数组 B = np.insert(A, insert_indices, values=np.zeros(len(insert_indices), dtype=int)) print(B) # 输出:[1 0 0 2 0 0 3 0 0 4 0 0 5]
解决方法2:用reshape+pad实现高效上采样
这种方法无需处理索引,利用numpy的矢量操作,更适合大规模数组:
import numpy as np k = 3 A = np.array([1,2,3,4,5]) # 将原数组转为列向量,在每个元素右侧补k-1个零,再展平为一维数组 B = np.pad(A.reshape(-1, 1), ((0,0), (0, k-1)), mode='constant').flatten() print(B) # 输出:[1 0 0 2 0 0 3 0 0 4 0 0 5]
内容的提问来源于stack exchange,提问作者Rikudo Sennin
相关产品推荐
相关产品推荐

