Julia中与Numpy pad_width等效的零填充方法探究
Julia中匹配Numpy pad_width的零填充实现方式
Numpy的np.pad函数通过pad_width参数支持灵活的填充配置:可以为每个轴分别设置前后填充宽度,也能统一设置所有轴的填充量。比如对二维复数数组做零填充的Python代码如下:
# Python 实现 import numpy as np # 生成二维复数随机数组 data = np.random.random((620, 327)) + np.random.random((620, 327)) * 1j # 配置各轴前后填充宽度:第一轴前后各填12,第二轴前后各填327 padWidths = ((12,12),(327,327)) # 填充后数组尺寸为(644, 981) zeroPaddedData = np.pad(data, padWidths)
在Julia中使用PaddedViews或ImageFiltering包时,无法直接传入Numpy那种嵌套元组格式的填充参数。你找到的写法:
# Julia 实现 zeroPaddedData = padarray(data, Fill(0,(12,327)))
这并不是完全匹配Numpy pad_width功能的推荐写法——因为Fill(0,(12,327))只会给数组的后边缘填充12(第一轴)和327(第二轴),而Numpy的((12,12),(327,327))是给每个轴的前后都填充对应宽度。
要实现和Numpy完全一致的前后填充,推荐用Pad类型来分别指定每个轴的前后填充量,写法如下:
using ImageFiltering # 对应Numpy的((12,12),(327,327)):第一轴前填12、后填12;第二轴前填327、后填327 zeroPaddedData = padarray(data, Pad(:constant, (12, 12), (327, 327)), 0)
或者如果用PaddedViews包,写法类似:
using PaddedViews zeroPaddedData = PaddedView(0, data, (12+1:620+12, 327+1:327+327+327)) # 这里的索引范围对应:原数组从12+1开始到620+12,前后各留12的填充位;第二轴同理
如果只是需要统一给每个轴的前后填充相同宽度,也可以用更简洁的写法:
# 每个轴前后都填充(12,327),等价于Numpy的pad_width=((12,12),(327,327)) zeroPaddedData = padarray(data, Fill(0, (12,327)), Fill(0, (12,327)))
内容的提问来源于stack exchange,提问作者Axion004
相关产品推荐
相关产品推荐

