如何对3D Numpy数组进行双向近似均等零填充以调整形状?
解决3D Numpy数组的双向均等零填充问题
没问题,我来帮你把2D的填充逻辑扩展到3D数组上!核心思路是针对每个轴分别计算双向填充的数量,再把这些填充参数传给np.pad(和你用的np.lib.pad用法完全一致)。
第一步:计算每个轴的填充量
你的原数组形状是(103, 37, 13),目标是(250, 250, 13),我们逐个轴拆解填充需求:
- 第一个轴(维度0):目标长度250 - 原长度103 = 147,双向均分的话前填73、后填74(147是奇数,没法完全均等,后部分多1个元素)
- 第二个轴(维度1):目标长度250 - 原长度37 = 213,前填106、后填107
- 第三个轴(维度2):目标和原长度都是13,不需要填充,前后填充量都是0
第二步:编写通用的3D填充代码
我写了一个通用方法,不管是3D还是更高维数组,只要传入目标形状就能自动计算填充量,不用手动算数值:
import numpy as np # 模拟你的原3D数组(实际替换成你的data即可) data = np.random.rand(103, 37, 13) target_shape = (250, 250, 13) # 自动计算每个轴的前后填充量 pad_width = [] for original_len, target_len in zip(data.shape, target_shape): total_pad = target_len - original_len pad_before = total_pad // 2 pad_after = total_pad - pad_before pad_width.append((pad_before, pad_after)) # 执行零填充 padded_data = np.pad(data, pad_width, mode='constant', constant_values=0) # 验证结果形状 print(padded_data.shape) # 输出: (250, 250, 13)
和你2D代码的对比
你之前的2D代码里,pad_width是[(2,3),(1,1)],对应两个轴的前后填充量;到3D数组时,只需要给pad_width再添加第三个轴的填充参数(也就是(0,0)),本质逻辑完全一致。上面的通用方法帮你省去了手动计算填充量的麻烦,还能自动处理奇数填充量的不均等情况。
内容的提问来源于stack exchange,提问作者ayush gupta
相关产品推荐
相关产品推荐

