Numpy.tile处理切片数组时轴混淆问题求助
解决方法
问题出在np.tile的维度匹配逻辑上:你的raster_band是(20,20)的2D数组,当传入reps=(1,1,4)时,numpy会自动给输入数组前面补1,把它当成(1,20,20)的3D数组处理,所以重复后第三维变成20*4=80,得到(1,20,80)的结果。
要得到(20,20,4)的目标形状,核心是先给2D数组新增一个第三维度,再在这个新维度上重复4次,有两种简洁的实现方式:
方式一:用np.expand_dims + np.tile
# 给2D数组添加第三维(形状变为(20,20,1)) raster_band_with_channel = np.expand_dims(raster_band, axis=-1) # 在第三维上重复4次 tensor = np.tile(raster_band_with_channel, (1,1,4))
方式二:用np.newaxis + np.repeat
这种方式更直接,不需要先扩展维度再平铺,直接指定重复的轴即可:
# 通过[..., np.newaxis]新增第三维,然后在该轴重复4次 tensor = np.repeat(raster_band[..., np.newaxis], 4, axis=-1)
两种方法最终都会得到形状为(20,20,4)的数组,满足你后续向量化操作的需求。
内容的提问来源于stack exchange,提问作者HK92
相关产品推荐
相关产品推荐

