如何为Numpy数组的指定维度执行右填充以调整形状?
解决Numpy二维数组仅右填充第二维度的问题
你的问题核心是对np.pad的参数格式理解有误,对于二维数组,pad_width需要明确指定每个维度的前后填充量,而非单一元组。以下是正确的实现方案:
import numpy as np class Padder: def __init__(self, mode="constant"): self.mode = mode def right_pad(self, array): num_missing_items = 87 - array.shape[1] # pad_width格式:((第一维度前填充数, 第一维度后填充数), (第二维度前填充数, 第二维度后填充数)) # 第一维度无需填充,所以设为(0,0);第二维度仅右侧(后方)填充,设为(0, num_missing_items) padded_array = np.pad(array, ((0, 0), (0, num_missing_items)), mode=self.mode) return padded_array
你之前的实现错误原因
第一个版本错误:
传入的(num_missing_items, 0)会被Numpy解析为「给所有维度的前侧填充63个元素,后侧填充0个」,导致第一维度从257变为257+63=320,最终形状成了(320, 87)。第二个版本错误:
array[1]是取数组的第二行(一维数组),而非第二维度,填充后自然只能得到形状为(87,)的一维结果。第三个版本错误:
你把array[0](第一行)和填充后的第二行拼成了一个一维数组,最终形状变成(2,),完全偏离了二维数组的需求。
验证测试
# 生成形状为(257,24)的测试数组 test_array = np.random.rand(257, 24) padder = Padder() result = padder.right_pad(test_array) print(result.shape) # 输出:(257, 87)
内容的提问来源于stack exchange,提问作者Conweezy
相关产品推荐
相关产品推荐

