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

Python中如何获取数组从1转换为0时的索引位置

数组中1转0的索引位置提取优化方案

问题描述

给定数组:

val = [[1,1,1,0,0,1,1,0,0,0], [0,1,1,1,0,1,1,0,0,0]]

需要提取数组中值从1转换为0的索引位置,预期输出:

[[(2,3),(4,5),(6,7)],[(0,1),(3,4),(4,5),(6,7)]]

尝试使用np.gradient的代码:

import numpy as np

X = np.gradient(val, axis=1)
Y = np.gradient(val, axis=0)
         
trans_YX = np.array(list(zip(Y.ravel(), X.ravel())), dtype('f4,f4')).reshape(Y.shape)

当前输出(梯度值数组):

[[(-1.,  0. ) ( 0.,  0. ) ( 0., -0.5) ( 1., -0.5) ( 0.,  0.5) ( 0.,  0.5)
  ( 0., -0.5) ( 0., -0.5) ( 0.,  0. ) ( 0.,  0. )]
 [(-1.,  1. ) ( 0.,  0.5) ( 0.,  0. ) ( 1., -0.5) ( 0.,  0. ) ( 0.,  0.5)
  ( 0., -0.5) ( 0., -0.5) ( 0.,  0. ) ( 0.,  0. )]]

更优实现方法

针对离散二进制数组的1→0转换检测,使用np.diff是更直接高效的方案,逻辑如下:

  1. 对每一行计算相邻元素的差值(后项减前项)
  2. 当差值为-1时,说明前一个元素是1、后一个是0,对应转换位置为(i, i+1)(i为当前差值的索引)

代码实现

import numpy as np

val = np.array([[1,1,1,0,0,1,1,0,0,0], [0,1,1,1,0,1,1,0,0,0]])
result = []

for row in val:
    # 计算行内相邻元素的差值
    row_diffs = np.diff(row)
    # 定位差值为-1的索引(即1→0的转换起始点)
    transition_indices = np.where(row_diffs == -1)[0]
    # 转换为预期的索引对格式
    row_result = [(idx, idx+1) for idx in transition_indices]
    result.append(row_result)

print(result)

方案优势

  • 逻辑精准:直接匹配“1转0”的定义,无需处理梯度带来的浮点值筛选问题
  • 效率更高:np.diff仅做简单的元素减法运算,计算量远小于梯度计算
  • 结果直接:一步得到预期的索引对格式,无需额外的数据转换或筛选

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:45:34