聊聊prod()与cumprod()区别cumsum()
pandas.Series.cumprod 官⽅⽂档
cumprod()累积连乘
Series.cumprod(axis=None, skipna=True, *args, **kwargs)
#实现功能:Return cumulative product over a DataFrame or Series axis.
#实现功能: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)
# 实现功能:Return the product of the values for the requested axis.
# return:scalar or Series
优点没看明⽩,因为常规情况下,所⽤的.prod()并⾮pandas下的函数,⽽是numpy下的函数。
numpy.prod官⽅⽂档python干嘛用的
numpy.prod(a, axis=None, dtype=None, out=None, keepdims=<class numpy._globals._NoValue>)
# 实现功能:Return the product of array elements over a given axis.
# return:product_along_axis : ndarray
返回给定轴上数组元素的乘积。
跟cumprod不同,cumprod是计算当前⼀个累积乘上前⾯所有的数据,更多是⼀个list;prod返回的是给定这个轴上最终⼀个值。
补充:【python初学者】简单易懂的图解:np.cumsum和np.cumprod函数到底在⼲嘛?
1.np.cumsum
本⼈是⼀名python⼩⽩,最近过完了python的基本知识后,在看《利⽤python进⾏数据分析》这本书,书中cumsum函数⼀笔带过留下本⼩⽩“懵逼树下你和我”,当然是我⾃⼰的问题不是书的问题,经过画图理解后渐渐明⽩了这个函数到底在⼲么。
1.1np.cumsum-轴的概念
⾸先,在学习cumsum函数之前我们应该先明⽩什么是轴,以下⾯代码来进⾏说明:
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]]])
其实数组的轴(axis)就是数组的维度,上⾯的代码⽣成了⼀个224的数组,所以
1、这个数组的0轴为2 ,axis=0
2、这个数组的1轴为2 ,axis=1
3、这个数组的2轴为4 ,axis=2
该数组如图所⽰(蓝,橙,黄,绿都是2轴,橙和绿上的“2轴”画图时忘了标注):
这⾥还要补充说⼀下:红⾊的数字只是因为我⽤的iPad画图很不⽅便所以没改成⿊⾊,忽略就好
1.2cumsum(axis=0)
cumsum作⽤:计算轴向元素累加和,返回由中间结果组成的数组
这句概念中我认为⼤家理解起来⽐较难受的地⽅应该是轴向元素累加。
⾸先,通过前⽂对轴概念的理解我们可以知道
axis=0代表着最外层的维度也就是0轴(这⾥可能说法不太正确,主要为了配合上节图⽚),所以就是0轴的累加计算,我们以前⽂⽤到的数组为例(红⾊虚线表⽰按照0轴进⾏累加):
step1:
沿着0轴进⾏累加
step2:
将[1,2,3,4]和[9,10,11,12]进⾏累加,将[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)
结果为:
array([[[ 1,  2,  3,  4],
[ 5,  6,  7,  8]],
[[10, 12, 14, 16],
[18, 20, 22, 24]]])
1.3cumsum(axis=1)
这⾥我们还是以之前举例的数组为例,沿着1轴进⾏累加(也就是2 * 2 * 4中的第⼆个2),这⾥为了⽅便讲解我将数组的摆放位置换了⼀下,不影响哈~step1:
红⾊虚线代表我们现在应该沿着1轴进⾏累加啦!
step2:
既然沿着1轴进⾏累加,我们是不是就应该在1轴内部进⾏累加呢?
所以就应该[1,2,3,4]和[5,6,7,8]进⾏累加,[9,10,11,12]和[13,14,15,16]进⾏累加
代码结果:
arr.cumsum(axis=1)
#运⾏结果
array([[[ 1,  2,  3,  4],
[ 6,  8, 10, 12]],
[[ 9, 10, 11, 12],
[22, 24, 26, 28]]])
1.4cumsum(axis=2)
都已经讲到沿着轴2进⾏累加了,废话就不多说了直接放图,⼤家看看有没有做对吧
step1:
⽼规矩:红⾊虚线表⽰沿着2轴进⾏累加,所以应该是1,2,3,4进⾏累加,5,6,7,8进⾏累加,依次类推
step2
我们以蓝⾊这⼀项为例:
第⼀项:1第⼆项:1+2=3第三项:1+2+3=6第四项:1+2+3+4=10
代码结果:
arr.cumsum(axis=2)
#运⾏结果
array([[[ 1,  3,  6, 10],
[ 5, 11, 18, 26]],
[[ 9, 19, 30, 42],
[13, 27, 42, 58]]])
讲到这⾥我相信⼤家应该能⾃⼰摸索出cumprod函数在⼲嘛啦!本篇⽂章⾥⾯因为需要结合图⽚进⾏讲解所以有些句⼦并不恰当~希望本篇⽂章能够让你明⽩cumsum函数到底在⼲嘛呀~