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

如何使用numpy.where创建符号变化位置的索引向量

用numpy.where()定位向量中符号变化的位置索引

要实现这个需求,核心是检测相邻元素的符号是否发生变化,再用numpy.where()提取对应索引,具体步骤如下:

  1. 构造相邻元素对:通过切片操作获取原向量的前n-1个元素(v[:-1])和后n-1个元素(v[1:]),两者对应位置的元素即为相邻元素对。
  2. 检测符号变化:用np.sign()获取每个元素的符号(正数返回1,负数返回-1,0返回0),比较相邻元素的符号是否不等,得到布尔掩码数组。
  3. 提取索引:用np.where()筛选出掩码中为True的位置,这些位置就是原向量中符号变化发生的前一个元素的索引。

代码示例

import numpy as np

# 输入向量
v = np.array([1, 2, -1, 2, 3, -1, 3, -10, -10, -10])
# 生成符号变化的布尔掩码
sign_change_mask = np.sign(v[:-1]) != np.sign(v[1:])
# 获取符号变化的位置索引
change_indices = np.where(sign_change_mask)[0]

print(change_indices)  # 输出: [1 2 4 5 6]

补充说明

  • 如果需要忽略0参与的符号变化(比如0和正数不算变化),可以将条件改为np.sign(v[:-1]) * np.sign(v[1:]) < 0,这样只有正负相乘为负的情况才会被检测到。
  • 该方法适用于任意长度的numpy数组,效率远高于循环遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:45:33