sum(-1)、sum(1)、sum(0)、sum()与axis=-1,1,0

本文详细介绍了numpy库中axis参数的含义及其在数组操作中的作用,如np.sum()和np.max()函数。通过实例展示了axis=0、axis=1和axis=-1时的不同效果,强调了axis如何影响矩阵的分组和降维。同时,解释了axis=-1等价于axis=最后一个维度,并提供了np.sum()函数的用法,展示了不同axis设置下的求和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、axis

 实例:

axis=0:

以axis=-1:

2. 对axis的理解

np.sum()


一、axis

一句话解释:设axis=i,则沿着第i个下标变化的方向进行操作(忽略该下标,其他下标相同的为一组,然后再对该组进行操作)

axis是将矩阵进行分组,然后再操作。而分组则意味着会降维,则每axis一次,维度就降低1(例如原来为三维矩阵, 现在对它进行操作,就会变为二维的)

当numpy函数不指定axis的值时,表示函数对所有元素进行操作;

当numpy函数指定axis的值时,表示函数沿着指定的axis轴方向进行操作;

axis=0:可以理解为按照行顺序,对列进行操作

axis=1:可以理解为按照列顺序,对行进行操作

>>> import numpy as np

>>> a=np.array([[1,2],
                [3,4],
                [5,6]])

>>> a.mean(axis=0)#按照行顺序,对每一列求均值
array([3., 4.])
>>> a.mean(axis=1)#按照列顺序,对每一行求均值
array([1.5, 3.5, 5.5]) 

 实例:


import numpy as np

np.random.seed(1234)
embeddings  = np.random.randint(0, 10, size=[3, 3, 5])
print(embeddings )

a = np.max(embeddings ,axis=-1)
b = np.max(embeddings ,axis=0)
c = np.max(embeddings ,axis=1)

print(a)
print(b)
print(c)

[[[3 6 5 4 8]
  [9 1 7 9 6]
  [8 0 5 0 9]]

 [[6 2 0 5 2]
  [6 3 7 0 9]
  [0 3 2 3 1]]

 [[3 1 3 7 1]
  [7 4 0 5 1]
  [5 9 9 4 0]]]

结果为:

[[8 9 9]
 [6 9 3]
 [7 7 9]]

[[6 6 5 7 8]
 [9 4 7 9 9]
 [8 9 9 4 9]]

[[9 6 7 9 9]
 [6 3 7 5 9]
 [7 9 9 7 1]]

刚刚的矩阵写成下标表示就是:

embeddings = [[[a000,a001,a002,a003,a004],
                          [a010,a011,a012,a013,a014],
                          [a020,a021,a022,a023,a024],              
                          [a030,a031,a032,a033,a034]]
              
                         [[a100,a101,a102,a103,a104],
                          [a110,a111,a112,a113,a114],
                          [a120,a121,a122,a123,a124],              
                          [a130,a131,a132,a133,a134]]
              
                         [[a200,a201,a202,a203,a204],
                          [a210,a211,a212,a213,a214],
                          [a220,a221,a222,a223,a224],              
                          [a230,a231,a232,a233,a234]]       

axis=0:

以axis=0为例,则沿着第0个下标(最左边的下标)变化的方向进行操作,也就是将除了第0个下标外,其他两个下标都相同的部分分成一组,然后再进行操作。具体分组如下(省略了一些组):

从上图可以看出,每3个数分成一组,所以现在总共是分了4*5个组(所以最终返回的结果也是一个shape=[4,5]的矩阵),对每个组都执行一次 max操作,将每个组的三个数中数值最大的数构成矩阵。

以axis=-1:

his means that the index that will be returned by argmax will be taken from the last axis.

这里需要特别说明一下axis=-1的操作,可能对python不熟悉的人会不理解这里的-1是哪个维度。在pyhton中,-1代表倒数第一个,也就是说,假如你的矩阵shape=[3,4,5],那么对这个矩阵来说,axis=-1,其实也就等于axis=2。因为这是个三维矩阵,所以axis可能的取值为0,1,2,所以最后一个就是2。你可以自己试试看两个取值结果是否相同。

2. 对axis的理解

通过上面的例子,你可能已经发现了,axis是将矩阵进行分组,然后再操作。而分组则意味着会降维

以刚刚的例子,原始矩阵的shape=[3,4,5],取axis=0再进行操作后,得到的矩阵shape=[4,5]。同样的,取axis=1再进行操作后,得到的矩阵shape=[3,5]。取axis=-1(axis=2)再操作后,shape=[3,4]。掌握这一点,能有利于你在神经网络中的变换或是数据操作中明确矩阵变换前后的形状,从而加快对模型的理解。

np.sum()

函数原型:

np.sum(a, axis=None, dtype=None, out=None, keepdims=False)

函数作用:

求给定的axis轴上的数组元素之和

import numpy as np

A = np.array([[1,2],
              [3,4]])
sum0 = np.sum(A, axis=0)    #沿着0轴求和 ,也就是与0轴平行的方向求和(按列求和)
sum1 = np.sum(A, axis=1)    #沿着1轴求和,也就是与1轴平行的方向求和(按行求和)
sum2 = np.sum(A)

print("输入矩阵:")
print(A)

print("沿着0轴求和(按列,axis = 0):",sum0)
print("沿着1轴求和(按行,aixs = 1):",sum1)
print("所有元素的和(axis = none):",sum2)

结果:

输入矩阵:

[[1 2] [3 4]]

沿着0轴求和(按列,axis = 0): [4 6]

沿着1轴求和(按行,aixs = 1): [3 7]

所有元素的和(axis = none): 10

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pengsen Ma

太谢谢了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值