【python初学者】简单易懂的图解:np.cumsum和np.cumprod函数到底在干嘛?

个人理解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轴”画图时忘了标注):
3维数组
这里还要补充说一下:红色的数字只是因为我用的iPad画图很不方便所以没改成黑色,忽略就好

1.2cumsum(axis=0)

cumsum作用计算轴向元素累加和,返回由中间结果组成的数组
这句概念中我认为大家理解起来比较难受的地方应该是轴向元素累加。

首先,通过前文对轴概念的理解我们可以知道
axis=0代表着最外层的维度也就是0轴(这里可能说法不太正确,主要为了配合上节图片),所以就是0轴的累加计算,我们以前文用到的数组为例(红色虚线表示按照0轴进行累加):
step1:
沿着0轴进行累加
0轴累加
step2:
将[1,2,3,4]和[9,10,11,12]进行累加,将[5,6,7,8]和[13,14,15,16]
0轴累加结果
代码:

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轴进行累加啦!
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进行累加,依次类推
2轴累加
step2
我们以蓝色这一项为例:

  1. 第一项:1
  2. 第二项:1+2=3
  3. 第三项:1+2+3=6
  4. 第四项: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函数到底在干嘛呀~

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值