多面解析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/zh-hk/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

發表回復

登錄後才能評論