多面解析np.cumsum

一、常规定义

1、np.cumsum可以对输入数组的元素进行累加操作,返回一个由累加值组成的新数组。

2、沿着指定轴的元素进行 sum 操作。对于类型为float的数组,数值累加可能会导致精度损失。对于保持精度的求和,使用cumsum。

3、cumsum(a, dtype=float)的累加器保持所需的精度。类型由a决定。a的类型不能改变。如果a的类型为int,那么累加器的类型会是np.int32或np.int64(取决于平台),而对于其他类型,它们会如上述。


import numpy as np
a = np.array([1,2,3])
print(np.cumsum(a)) #[1, 3, 6]

b = np.array([(1,2,3),(4,5,6)])
print(np.cumsum(b, axis=0)) #[[1,2,3], [5,7,9]])
print(np.cumsum(b, axis=1)) #[[1,3,6], [4,9,15]]

二、利用np.cumsum做滑动平均

1、在滤波器设计中,将其作为模拟器,以近似系统函数或信号的衰减速度的方法使用cumsum。

2、累加之后计算平均,这是一种用于计算数据序列的平均值的技术。例如,在时间序列数据中可以将np.cumsum与np.arange结合使用,以计算数据的滑动平均值。


def moving_average(a, n=3) :
    ret = np.cumsum(a, dtype=float)
    ret[n:] = ret[n:] - ret[:-n]
    return ret[n - 1:] / n

a = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
print(moving_average(a, n=3)) #[ 2.  3.  4.]

三、用np.cumsum实现分组且分组后每组内部求和

1、可以用np.cumsum实现下面的操作:对输入数组划分为几段,每段内部元素求和后输出。

2、我们可以通过先计算原始数组的累计总和,并将每个段开头偏移一定数量的元素,获得每个分段的求和结果。


def segment_sum(a, L):
    # 求得每个分块的头和尾位置
    limits = list(range(0, len(a), L)) + [len(a)]
    # 依次对相邻分块累加求和,np.diff得到每个分块累加和
    sums = [np.cumsum(a[limits[i]:limits[i+1]]) for i in range(len(limits) - 1)]
    return np.concatenate(sums)

a = np.array([1,2,3,4,5,6,7,8,9])
print(segment_sum(a, 3)) #[6, 15, 24, 17]

四、利用np.cumsum实现局部最小值/最大值的检测

1、通过计算差异值并使用布尔掩码,可以轻松地从数据点中识别出局部最小值或局部最大值。

2、该方法基于以下性质:如果当前值小于其相邻值,则当前值在局部最小值上,相反,如果当前值大于其相邻值,则当前值在局部最大值上。


def local_minmax(a):
    # 计算如果是局部最小值/最大值则差异值的正负符号
    diff = np.diff(a)
    # 获得布尔掩码,其中差异为正则表示其在局部最大值上,反之在局部最小值上
    mask = np.concatenate(([False], diff[:-1] * diff[1:] < 0, [False]))
    # 返回局部最小值和局部最大值的点 Vales
    if not mask.any():
        return np.array([], dtype=int), np.array([], dtype=int)
    else:
        extrema = np.where(mask)[0]
        return extrema, a[extrema]

a = np.array([1,3,2,4,3,5,4,6,7,8,6,3,4,2])
minima_idx, minima_val = local_minmax(a)
print(minima_idx, minima_val) # [1 , 2, 3, 4, 6, 11 , 13] [ 3 2 3 4 4 3 2]

原创文章,作者:LFHNB,如若转载,请注明出处:https://www.506064.com/n/331787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
LFHNB的头像LFHNB
上一篇 2025-01-20 14:11
下一篇 2025-01-20 14:11

相关推荐

  • Python定义两个列表的多面探索

    Python是一种强大的编程语言,开放源代码,易于学习和使用。通过Python语言,我们可以定义各种数据类型,如列表(list)。在Python中,列表(list)在处理数据方面起…

    编程 2025-04-29
  • Python中中括号里数字的多面

    本文将从多个方面对Python中中括号里数字做详细的阐述,包括索引、切片、循环等,以及一些常见问题的解决方法。 一、索引操作 索引操作指的是通过中括号里的数字来访问列表(list)…

    编程 2025-04-28
  • Python中的np.arange函数

    在本篇文章中,我们将着眼于Python中的np.arange函数。我们将从多个方面对这个函数进行全面解析,涵盖的内容包括介绍、功能、用法、案例以及注意事项等。如果您想深入了解np.…

    编程 2025-04-28
  • 深入理解np.diag

    一、介绍 NumPy是一个开源的Python科学计算库,它支持高维数组和矩阵运算。np.diag是NumPy中的一个函数,可以用来创建对角矩阵、获取对角线元素、构建对角线数组等。 …

    编程 2025-04-25
  • Python命令行执行的多面探秘

    一、基础操作 Python是一种通用编程语言,可以在命令行中运行。做到这一点的最简单方法是打开命令行窗口,键入Python,然后按Enter。这将带您到Python提示符里。 $p…

    编程 2025-04-24
  • np.divide函数详解

    一、简介 np.divide函数是numpy库中的一个函数,用于对两个数组进行逐元素的除法运算。它是一个通用的、基础的元素级函数,可以对数组中的任何类型进行操作。使用np.divi…

    编程 2025-04-24
  • Python cumsum函数详解

    一、基本介绍 1、cumsum函数是Python numpy库中的一个函数,主要作用是对数组进行累加运算。 2、cumsum函数的原型是numpy.cumsum(a, axis=N…

    编程 2025-04-23
  • 一文详解np.mat函数

    一、np.mat函数是什么? np.mat函数是一个将数组转换成矩阵的函数,是numpy中的一个基础函数。它可以将一个有序的n维数组转换成一个矩阵,并返回该矩阵的视图,也就是返回一…

    编程 2025-04-23
  • 深入探索np.linalg.norm函数

    np.linalg.norm是numpy库中常用的函数之一,用于计算向量或矩阵的范数。在许多数学和物理问题中,范数是一个关键的概念,它衡量了向量的长度大小和矩阵的大小。在本文中,我…

    编程 2025-04-23
  • 深入浅出:np.floor

    一、概述 在Python中,numpy模块是一个强大的数学工具集,提供了许多有用的功能。其中,np.floor是一个常用的函数,它的作用是返回输入一个小数后向下取整的结果。 imp…

    编程 2025-04-22

发表回复

登录后才能评论