Julia 相当于 np.pad 中的 pad_width

标签 julia padding zero-padding

Numpy 有一个 padding function使用 pad_width 参数执行以下操作:

pad_width:填充到每个轴边缘的值的数量。 ((before_1, after_1), ... (before_N, after_N)) 每个轴的唯一焊盘宽度。 (before, after)((before, after),) 为每个轴产生相同的前后垫。 (pad,)int 是 before = after = 所有轴的 pad 宽度的快捷方式。

Julia 中是否有具有类似零填充功能的等效函数?在 Python 中创建具有复杂数据和零填充的二维矩阵:

# Python Implementation
import numpy as np

data = np.random.random((620, 327)) + np.random.random((620, 327)) * 1j
padWidths = ((12,12),(327,327))
# Returns an array of size (644, 981) as the pad_widths parameter specified 
# zero-padding of length 644 = 620 + 12 + 12 and 981 =  327 + 327 + 327
zeroPaddedData = np.pad(data, padWidths)

在 Julia 中使用二维复杂数组执行类似的分析:

# Julia Implementation
using Random
using PaddedViews
using ImageFiltering

data = randn(ComplexF32, (620, 327))
padWidth = ((12,12),(327,327))

# This returns an array of size (620,327)
zeroPaddedDataOne= PaddedView(0, data,(620,327))

# This returns an array of size (620,981)
zeroPaddedDataTwo = padarray(data, Fill(0,(0,327)))

# This returns an array of size (644,327)
zeroPaddedDataThree= padarray(data, Fill(0,(12,0)))

# This returns an array of size (644,981)
zeroPaddedDataFour = padarray(data, Fill(0,(12,327)))

# This doesn't work as you can't pass in a tuple of tuples into an array with 2-dimensions
zeroPaddedDataFive = padarray(data, Fill(0,padWidth))
zeroPaddedDataSix = PaddedView(0, data,padWidth)

看来一种解决方案是使用

zeroPaddedData = padarray(data, Fill(0,(12,327)))

匹配 Numpy 中 pad_width 的功能(它不是传递元组的元组,而是包含沿数组每个维度执行的填充量的单个元组)。这是匹配 Numpy 中的 pad_width 参数的推荐方法吗?

最佳答案

在 PlatedViews 中,第一个元组参数提供大小,第二个参数提供填充矩阵中原始矩阵的左上角位置。 举个例子,考虑一个矩阵:

julia> data = rand(0:9,2,3)+im*rand(0:9,2,3)
2×3 Matrix{Complex{Int64}}:
 8+8im  7+2im  9+0im
 8+0im  2+5im  3+9im

填充后你会得到:

julia> collect(PaddedView(Complex{Int32}(0),data,(4,6),(2,2)))
4×6 Matrix{Complex{Int64}}:
 0+0im  0+0im  0+0im  0+0im  0+0im  0+0im
 0+0im  8+8im  7+2im  9+0im  0+0im  0+0im
 0+0im  8+0im  2+5im  3+9im  0+0im  0+0im
 0+0im  0+0im  0+0im  0+0im  0+0im  0+0im

新矩阵为 4x6(第一个元组参数 (4,6)),原始矩阵从位置 (2,2) 开始。

所以您正在寻找的可能是:

zeroPaddedData= PaddedView(ComplexF32(0.), data, (620 + 12 + 12, 327 + 327 + 327),(12+1, 327+1))

这将产生 644x981 的大小,并将 data 放置在其中,从具有类似于 Python 代码的 pad 的位置 (13,328) 开始。您可能希望使用 collect 来实现填充矩阵,如我的示例所示。

关于Julia 相当于 np.pad 中的 pad_width,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75890751/

相关文章:

julia - 追加到向量

gpu - Julia 中的 "finalize"意味着什么?

python - 具有多个根的编程语言

c - 结构填充的规则是什么

json - 如何用 JQ 填充数字?

visual-studio-code - 为什么当鼠标悬停在包中的函数上时没有弹出信息

css - 使用百分比 (%) 时如何计算填充?

javascript - 传单填充不起作用

tensorflow - keras.layers.Conv2D 的默认内核大小、零填充和步幅是多少?

c - 在 C 中向字符串值添加前导零