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

如何无需遍历列填充Numpy数组中特定区间的值

Numpy向量化实现按分界点填充数组行

给定Numpy数组:

import numpy as np

arr = np.array([
    [3., 4., 5., 6., 7., 8., 9., 8., 7., 6.],
    [0., 0., 1., 0., 0., 1., 0., 0., 0., 0.],
    [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]
])

需要将第2行按第1行的1作为分界点填充:

  • 从起始到第一个1的位置(含):填充第0行第一个1对应位置的值
  • 第一个1之后到第二个1的位置(含):填充第0行第二个1对应位置的值
  • 第二个1之后到末尾:填充第0行最后一个位置的值

实现代码(无列遍历)

# 获取第1行中1的索引位置
ones_indices = np.where(arr[1] == 1)[0]

# 生成每个填充区间的起始和结束索引
starts = np.concatenate([[0], ones_indices + 1])
ends = np.concatenate([ones_indices + 1, [arr.shape[1]]])

# 获取每个区间对应的填充值:前两个是第0行对应1的位置的值,最后一个是第0行末尾值
fill_values = np.concatenate([arr[0, ones_indices], [arr[0, -1]]])

# 重复填充值对应区间长度,赋值给第2行
arr[2] = np.repeat(fill_values, ends - starts)

运行后输出目标数组:

print(arr)
# 结果:
# [[3. 4. 5. 6. 7. 8. 9. 8. 7. 6.]
#  [0. 0. 1. 0. 0. 1. 0. 0. 0. 0.]
#  [5. 5. 5. 8. 8. 8. 6. 6. 6. 6.]]

说明

全程使用Numpy内置函数实现向量化操作,没有循环遍历列,效率远高于逐列处理:

  • np.where快速定位分界点1的位置
  • np.concatenate拼接区间的起始/结束索引
  • np.repeat根据区间长度批量生成填充值,直接赋值给目标行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:22:18