You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Julia中高效实现矩阵的对称填充(无依赖)

实现2D数组的对称填充(symmetric模式)

你需要实现的是类似numpy中pad函数的symmetric模式,该模式会沿着数组边界进行镜像反射(包含边界元素)。结合你已有的replicate模式实现,以下是高效的无依赖2D数组对称填充实现:

function padimagesymmetric(input, pad)
    m, n = size(input)
    p_row, p_col = pad

    # 生成行索引
    if m == 1
        row_indices = fill(1, m + 2*p_row)
    else
        # 上方填充:取原数组前m-1个元素的逆序,重复至所需长度
        left_rows = repeat(reverse(1:m-1), ceil(Int, p_row/(m-1)))[1:p_row]
        middle_rows = 1:m
        # 下方填充:取原数组后m-1个元素的逆序,重复至所需长度
        right_rows = repeat(reverse(2:m), ceil(Int, p_row/(m-1)))[1:p_row]
        row_indices = vcat(left_rows, middle_rows, right_rows)
    end

    # 生成列索引
    if n == 1
        col_indices = fill(1, n + 2*p_col)
    else
        # 左侧填充:取原数组前n-1个元素的逆序,重复至所需长度
        left_cols = repeat(reverse(1:n-1), ceil(Int, p_col/(n-1)))[1:p_col]
        middle_cols = 1:n
        # 右侧填充:取原数组后n-1个元素的逆序,重复至所需长度
        right_cols = repeat(reverse(2:n), ceil(Int, p_col/(n-1)))[1:p_col]
        col_indices = vcat(left_cols, middle_cols, right_cols)
    end

    return input[row_indices, col_indices]
end

实现逻辑说明

  • 当数组某一维度长度为1时,填充的所有元素都等于该维度的唯一元素;
  • 对于长度大于1的维度:
    • 上方/左侧填充:以边界元素为轴,镜像原数组的前m-1个元素,重复至所需填充长度;
    • 中间部分:直接保留原数组的全部索引;
    • 下方/右侧填充:以边界元素为轴,镜像原数组的后m-1个元素,重复至所需填充长度;
  • 利用Julia内置的数组拼接与重复操作实现高效计算,避免循环带来的性能损耗。

内容的提问来源于stack exchange,提问作者Eric Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 20:31:56