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

如何实现numpy数组行逐次向下移位(每次下移一行补零)

Numpy实现行下移补0的方法

Numpy没有直接对应此需求的预定义函数,但可以通过简单的切片操作或结合np.roll快速实现,以下是几种实用方案:

方案1:切片赋值(推荐,直观高效)

通过创建全0数组,将原数组的前n-1行赋值到新数组的后n-1行,顶部自动补0:

import numpy as np

def shift_down(arr):
    # 创建与原数组形状一致的全0数组
    shifted = np.zeros_like(arr)
    # 将原数组的前m-1行(m为总行数)赋值给新数组的第1行及以后
    shifted[1:] = arr[:-1]
    return shifted

# 测试用例
original_arr = np.array([
    [1,1,1,1,1],
    [2,2,2,2,2],
    [3,3,3,3,3],
    [4,4,4,4,4]
])

# 第一次调用
result1 = shift_down(original_arr)
print(result1)
# 输出:
# [[0 0 0 0 0]
#  [1 1 1 1 1]
#  [2 2 2 2 2]
#  [3 3 3 3 3]]

# 第二次调用
result2 = shift_down(result1)
print(result2)
# 输出:
# [[0 0 0 0 0]
#  [0 0 0 0 0]
#  [1 1 1 1 1]
#  [2 2 2 2 2]]

方案2:原地修改(节省内存)

如果不需要保留原数组,可以直接在原数组上操作,避免创建新数组:

def shift_down_inplace(arr):
    # 先复制原数组的前m-1行
    temp = arr[:-1].copy()
    # 将原数组全部置0
    arr[:] = 0
    # 把复制的行赋值到原数组的第1行及以后
    arr[1:] = temp

# 测试
arr = original_arr.copy()
shift_down_inplace(arr)
print(arr)  # 得到第一次调用的结果
shift_down_inplace(arr)
print(arr)  # 得到第二次调用的结果

方案3:结合np.roll实现

利用np.roll的行滚动功能,再将顶部行置0,适合熟悉roll函数的场景:

def shift_down_with_roll(arr):
    # 将所有行向下滚动1位(最后一行会移到第一行)
    rolled = np.roll(arr, 1, axis=0)
    # 将第一行置0
    rolled[0] = 0
    return rolled

# 测试
result1 = shift_down_with_roll(original_arr)
result2 = shift_down_with_roll(result1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:57:13