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

Numpy是否有内置函数实现一维数组的Roll+Pad(移位+填充)操作?

Numpy中实现一维数组移位+0填充的方法

Numpy没有直接对应你需求的单一内置函数,但可以通过现有函数组合出简洁的等效实现,效果和你写的自定义函数完全一致。

方法1:基于np.roll的紧凑实现

保留你原思路的基础上,用切片简化条件判断逻辑:

import numpy as np

def roll_pad(a, t):
    b = np.roll(a, t)
    # 统一处理正负移位的填充区域
    mask = slice(t) if t >= 0 else slice(t, None)
    b[mask] = 0
    return b

z = np.array([1, 2, 3, 4, 5, 6])
print(z)
print(roll_pad(z, 2))  # [0 0 1 2 3 4]
print(roll_pad(z, -2)) # [3 4 5 6 0 0]

方法2:直接拼接数组(无需np.roll)

跳过滚动操作,直接通过np.concatenate拼接0数组和原数组切片,逻辑更直白:

import numpy as np

def roll_pad(a, t):
    n = len(a)
    dtype = a.dtype
    if t > 0:
        return np.concatenate([np.zeros(t, dtype=dtype), a[:n-t]])
    elif t < 0:
        t_abs = -t
        return np.concatenate([a[t_abs:], np.zeros(t_abs, dtype=dtype)])
    return a.copy()

z = np.array([1, 2, 3, 4, 5, 6])
print(z)
print(roll_pad(z, 2))  # [0 0 1 2 3 4]
print(roll_pad(z, -2)) # [3 4 5 6 0 0]

方法3:利用np.pad实现

通过np.pad的填充功能结合数组切片,快速达成目标:

import numpy as np

def roll_pad(a, t):
    if t > 0:
        return np.pad(a[:-t], (t, 0), mode='constant')
    elif t < 0:
        t_abs = -t
        return np.pad(a[t_abs:], (0, t_abs), mode='constant')
    return a.copy()

z = np.array([1, 2, 3, 4, 5, 6])
print(z)
print(roll_pad(z, 2))  # [0 0 1 2 3 4]
print(roll_pad(z, -2)) # [3 4 5 6 0 0]

以上几种方法都能完美复现你自定义函数的功能,可根据代码风格选择合适的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:20:26