1 python数据分析numpy基础之cumprod求数组累计积
python的numpy库的cumprod()函数,用于获取数组沿指定轴每个位置的累计积(cumulative product)。
本文的累计积是指第1个数到第n个数的积。比如数组a=[a1,a2,a3,a4,a5],那么第1个数的累计积为a1,第2个数的累计积为a1*a2,第3个数的累计积为a1*a2*a3,依次类推。np.cumprod()函数返回的是每个位置的当前元素的累计积。
比如,np.cumprod(a)=array([a1,a1*a2,a1*a2*a3,a1*a2*a3*a4,a1*a2*a3*a4*a5])。
用法
numpy.cumprod(a, axis=None, dtype=None, out=None)
描述
cumprod()返回数组沿指定轴的累计积。
入参axis表示指定轴,默认为None表示整个数组转为一维数组后的每个位置的累计积。axis只能为整数,不支持整数元组。
1.1 入参a
numpy.cumprod()的入参a,为必选入参,可以为数组、列表、元组。
>>> import numpy as np
# np.cumprod()函数返回的是每个位置的当前元素的累计积
# 比如数组a=[a1,a2,a3]
# np.cumprod(a)=array([a1,a1*a2,a1*a2*a3])
# 入参a为列表
>>> np.cumprod([-2,3,6,5,9,1])
array([ -2, -6, -36, -180, -1620, -1620])
# 入参a为元组
>>> np.cumprod((-2,3,6,5,9,1))
array([ -2, -6, -36, -180, -1620, -1620])
# 入参a为数组
>>> np.cumprod(np.array((-2,3,6,5,9,1)))
array([ -2, -6, -36, -180, -1620, -1620])
1.2 入参axis为整数
numpy.cumprod()的入参axis为可选入参,只能为整数(不支持元组),范围[0, ndim),默认为None,表示求整个数组的累计积,若为多维数组则转换为一维数组求每个位置的累计积。
若axis=n为整数,则对沿指定轴n的每个元素的累计积。
若axis=负数,则-1对应最后一个轴,-2倒数第2个轴,依此类推。
>>> import numpy as np
>>> ar3=np.arange(1,9).reshape(2,2,2)
>>> ar3
array([[[1, 2],[3, 4]],[[5, 6],[7, 8]]])
# axis默认为None,cumprod()求转为一维数组后的每个位置的累计积(cumulative product)
>>> np.cumprod(ar3)
array([ 1, 2, 6, 24, 120, 720, 5040, 40320])
# axis=0, cumprod()沿0轴方向的每个位置的累计积
>>> np.cumprod(ar3,axis=0)
array([[[ 1, 2],[ 3, 4]],[[ 5, 12],[21, 32]]])
# axis=1, cumprod()沿1轴方向的每个位置的累计积
>>> np.cumprod(ar3,axis=1)
array([[[ 1, 2],[ 3, 8]],[[ 5, 6],[35, 48]]])
# axis=2, cumprod()沿2轴方向的每个位置的累计积
>>> np.cumprod(ar3,axis=2)
array([[[ 1, 2],[ 3, 12]],[[ 5, 30],[ 7, 56]]])
# axis=负数,则-1对应最后一个轴,-2倒数第2个轴,依此类推
>>> np.cumprod(ar3,axis=-1)
array([[[ 1, 2],[ 3, 12]],[[ 5, 30],[ 7, 56]]])