聊聊prod()與cumprod()區(qū)別cumsum()
pandas.Series.cumprod 官方文檔
cumprod()累積連乘
Series.cumprod(axis=None, skipna=True, *args, **kwargs) #實(shí)現(xiàn)功能:Return cumulative product over a DataFrame or Series axis. #實(shí)現(xiàn)功能:Returns a DataFrame or Series of the same size containing the cumulative product. #return:scalar or Series
cumsum()累積連加
pandas.Series.prod官方文檔
Series.prod(axis=None, skipna=None, level=None, numeric_only=None, min_count=0, **kwargs) # 實(shí)現(xiàn)功能:Return the product of the values for the requested axis. # return:scalar or Series
優(yōu)點(diǎn)沒看明白,因?yàn)槌R?guī)情況下,所用的.prod()并非pandas下的函數(shù),而是numpy下的函數(shù)。
numpy.prod官方文檔
numpy.prod(a, axis=None, dtype=None, out=None, keepdims=<class numpy._globals._NoValue>) # 實(shí)現(xiàn)功能:Return the product of array elements over a given axis. # return:product_along_axis : ndarray
返回給定軸上數(shù)組元素的乘積。
跟cumprod不同,cumprod是計算當(dāng)前一個累積乘上前面所有的數(shù)據(jù),更多是一個list;prod返回的是給定這個軸上最終一個值。
補(bǔ)充:【python初學(xué)者】簡單易懂的圖解:np.cumsum和np.cumprod函數(shù)到底在干嘛?
1.np.cumsum
本人是一名python小白,最近過完了python的基本知識后,在看《利用python進(jìn)行數(shù)據(jù)分析》這本書,書中cumsum函數(shù)一筆帶過留下本小白“懵逼樹下你和我”,當(dāng)然是我自己的問題不是書的問題,經(jīng)過畫圖理解后漸漸明白了這個函數(shù)到底在干么。
1.1np.cumsum-軸的概念
首先,在學(xué)習(xí)cumsum函數(shù)之前我們應(yīng)該先明白什么是軸,以下面代碼來進(jìn)行說明:
arr=np.arange(1,17,1).reshape((2,2,4)) arr
array([[[ 1, 2, 3, 4],
[ 5, 6, 7, 8]],
[[ 9, 10, 11, 12],
[13, 14, 15, 16]]])
其實(shí)數(shù)組的軸(axis)就是數(shù)組的維度,上面的代碼生成了一個224的數(shù)組,所以
1、這個數(shù)組的0軸為2 ,axis=0
2、這個數(shù)組的1軸為2 ,axis=1
3、這個數(shù)組的2軸為4 ,axis=2
該數(shù)組如圖所示(藍(lán),橙,黃,綠都是2軸,橙和綠上的“2軸”畫圖時忘了標(biāo)注):

這里還要補(bǔ)充說一下:紅色的數(shù)字只是因?yàn)槲矣玫膇Pad畫圖很不方便所以沒改成黑色,忽略就好
1.2cumsum(axis=0)
cumsum作用:計算軸向元素累加和,返回由中間結(jié)果組成的數(shù)組
這句概念中我認(rèn)為大家理解起來比較難受的地方應(yīng)該是軸向元素累加。
首先,通過前文對軸概念的理解我們可以知道
axis=0代表著最外層的維度也就是0軸(這里可能說法不太正確,主要為了配合上節(jié)圖片),所以就是0軸的累加計算,我們以前文用到的數(shù)組為例(紅色虛線表示按照0軸進(jìn)行累加):
step1:
沿著0軸進(jìn)行累加

step2:
將[1,2,3,4]和[9,10,11,12]進(jìn)行累加,將[5,6,7,8]和[13,14,15,16]

代碼:
arr=np.array([[[ 1, 2, 3, 4],
[ 5, 6, 7, 8]],
[[ 9, 10, 11, 12],
[13, 14, 15, 16]]])
arr.cumsum(axis=0)
結(jié)果為:
array([[[ 1, 2, 3, 4],
[ 5, 6, 7, 8]],
[[10, 12, 14, 16],
[18, 20, 22, 24]]])
1.3cumsum(axis=1)
這里我們還是以之前舉例的數(shù)組為例,沿著1軸進(jìn)行累加(也就是2 * 2 * 4中的第二個2),這里為了方便講解我將數(shù)組的擺放位置換了一下,不影響哈~
step1:
紅色虛線代表我們現(xiàn)在應(yīng)該沿著1軸進(jìn)行累加啦!

step2:
既然沿著1軸進(jìn)行累加,我們是不是就應(yīng)該在1軸內(nèi)部進(jìn)行累加呢?
所以就應(yīng)該[1,2,3,4]和[5,6,7,8]進(jìn)行累加,[9,10,11,12]和[13,14,15,16]進(jìn)行累加

代碼結(jié)果:
arr.cumsum(axis=1)
#運(yùn)行結(jié)果
array([[[ 1, 2, 3, 4],
[ 6, 8, 10, 12]],
[[ 9, 10, 11, 12],
[22, 24, 26, 28]]])
1.4cumsum(axis=2)
都已經(jīng)講到沿著軸2進(jìn)行累加了,廢話就不多說了直接放圖,大家看看有沒有做對吧
step1:
老規(guī)矩:紅色虛線表示沿著2軸進(jìn)行累加,所以應(yīng)該是1,2,3,4進(jìn)行累加,5,6,7,8進(jìn)行累加,依次類推

step2
我們以藍(lán)色這一項(xiàng)為例:
第一項(xiàng):1第二項(xiàng):1+2=3第三項(xiàng):1+2+3=6第四項(xiàng):1+2+3+4=10

代碼結(jié)果:
arr.cumsum(axis=2)
#運(yùn)行結(jié)果
array([[[ 1, 3, 6, 10],
[ 5, 11, 18, 26]],
[[ 9, 19, 30, 42],
[13, 27, 42, 58]]])
講到這里我相信大家應(yīng)該能自己摸索出cumprod函數(shù)在干嘛啦!本篇文章里面因?yàn)樾枰Y(jié)合圖片進(jìn)行講解所以有些句子并不恰當(dāng)~希望本篇文章能夠讓你明白cumsum函數(shù)到底在干嘛呀~
相關(guān)文章
Python實(shí)現(xiàn)多張圖片合成文字的效果
前段時間看到有人問如何使用Python實(shí)現(xiàn)多張圖片組成文字的效果?覺得還挺有意思,于是嘗試做了一下,剛好趕上端午節(jié),所以打算從網(wǎng)上下載1000張王心凌的照片,組成端午安康的字樣,感興趣的可以了解一下2022-06-06
Pytorch 統(tǒng)計模型參數(shù)量的操作 param.numel()
這篇文章主要介紹了Pytorch 統(tǒng)計模型參數(shù)量的操作 param.numel(),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05
Python+pytorch實(shí)現(xiàn)天氣識別
這篇文章主要為大家詳細(xì)介紹了如何利用Python+pytorch實(shí)現(xiàn)天氣識別功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以參考一下2022-10-10
Python mlxtend庫數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)補(bǔ)充工具功能探索
這篇文章主要介紹了Python mlxtend庫數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)補(bǔ)充工具功能探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Python實(shí)現(xiàn)API開發(fā)的詳細(xì)教程
在現(xiàn)代軟件開發(fā)中,API扮演著至關(guān)重要的角色,API接口用于不同軟件組件之間的通信和數(shù)據(jù)交換,實(shí)現(xiàn)了系統(tǒng)之間的互操作性,Python作為一種簡單易用且功能強(qiáng)大的編程語言,廣泛應(yīng)用于API接口的開發(fā),本文將詳細(xì)介紹如何使用Python開發(fā)API接口,需要的朋友可以參考下2024-12-12
python實(shí)現(xiàn)數(shù)字炸彈游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)數(shù)字炸彈游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-07-07

