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

如何在NumPy数组中提取元素值差值为±1的相邻索引对?

提取NumPy数组中相邻元素差值为±1的索引对

给定NumPy数组:

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

需要提取相邻元素差值为1或-1(即0与1相互转换)的索引对,最终目标结果为[(1,2),(3,4),(5,6),(9,10)]。

问题分析

如果分别提取差值为1和-1的索引列表后,用**逻辑与(&)合并会触发ValueError,这是因为逻辑与要求同时满足两个条件,而一个差值不可能既是1又是-1,正确的做法是用逻辑或(|)**合并条件,或者直接用数组筛选一次性获取符合条件的位置。

解决方案

直接通过NumPy的差值计算和条件筛选,一步得到目标索引对:

  1. 计算数组相邻元素的差值:np.diff(val)会返回长度比原数组少1的差值数组,每个元素对应原数组中val[i+1] - val[i]。
  2. 筛选出差值为1或-1的位置。
  3. 将这些位置转换为(i, i+1)的索引对格式。

完整代码示例:

import numpy as np

val = np.array([1,1,0,0,1,1,0,4,0,0,1])
# 计算相邻元素差值
diff_array = np.diff(val)
# 筛选差值为1或-1的位置掩码
mask = (diff_array == 1) | (diff_array == -1)
# 获取符合条件的索引
target_positions = np.where(mask)[0]
# 转换为目标索引对
result = [(pos, pos+1) for pos in target_positions]

print(result)  # 输出: [(1, 2), (3, 4), (5, 6), (9, 10)]

也可以用更简洁的写法:

import numpy as np

val = np.array([1,1,0,0,1,1,0,4,0,0,1])
result = [(i, i+1) for i in np.where(np.isin(np.diff(val), [1, -1]))[0]]
print(result)

内容的提问来源于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 16:24:32