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/