如何获取np.diff()生成的布尔数组对应的实际差值及元素位置
解决numpy数组差值的两个需求
嘿,这两个需求其实都很容易实现,我给你一步步拆解:
首先,咱们先明确基础操作:先计算出数组的差值数组,再生成对应的布尔数组。先看示例代码:
import numpy as np # 示例数组 arr = np.array([1, 2, 4, 5, 7]) # 计算后一个元素减前一个元素的差值 diffs = np.diff(arr) # 判断差值是否大于1的布尔数组 bool_arr = diffs > 1
这里diffs是array([1, 2, 1, 2]),bool_arr是array([False, True, False, True]),接下来处理你的两个需求:
一、获取布尔数组每个元素对应的实际差值
其实diffs本身就是和bool_arr一一对应的差值数组,每个位置的元素正好对应bool_arr中True/False的实际差值。如果需要把True和False对应的差值分别存入单独数组,直接用布尔索引就行:
# 获取所有True对应的差值 true_diffs = diffs[bool_arr] # 获取所有False对应的差值 false_diffs = diffs[~bool_arr]
运行后true_diffs是array([2, 2]),false_diffs是array([1, 1]),完全符合需求~
二、获取布尔值在数组中的位置
用np.where()就能轻松拿到索引位置:
# 获取所有True的索引位置(对应diffs数组的索引) true_indices = np.where(bool_arr)[0] # 获取所有False的索引位置 false_indices = np.where(~bool_arr)[0]
这里的索引是相对于差值数组diffs的,比如true_indices是array([1, 3]),对应diffs中第1和第3个元素(也就是原数组中arr[2]-arr[1]和arr[4]-arr[3]的差值)。如果需要对应原数组的起始位置(比如差值是arr[i+1]-arr[i],这里的i就是原数组的索引),这个索引和true_indices是完全一致的,直接用就行。
为什么你之前的写法没成功?
你尝试的array[array>1]是直接对原数组操作,但咱们的布尔数组是基于差值数组生成的,所以得用差值数组diffs来做布尔索引,而不是原数组哦~
内容的提问来源于stack exchange,提问作者nukenine
相关产品推荐
相关产品推荐

