numpy深度学习常用函数及参数理解(axis, keepdims)

axis:

以axis=0为例,则沿着第0个下标(最左边的下标)变化的方向进行操作,
也就是将除了第0个下标外,其他两个下标都相同的部分分成一组,然后再进行操作
例如一个3*3的二维数组A(3, 3)
如果定义axis = 0,也就是说除了第一个下标可以不同,其他下标必须都相同,那么用C++的数组表示,分组如下:
第一组:A[0][0], A[1][0], A[2][0]
第二组:A[0][1], A[1][1], A[2][1]
第三组:A[0][2], A[1][2], A[2][2]

三维数组一样,就是axis指定的维度不一样,其他两个维度下标要一样。

当axis=-1时,-1代表倒数第一个,加入矩阵shape=[3,4,5],对于该矩阵也就是等于axis=2。

 

sum:

例如一个a:100*10

np.exp(a):100*10(相当对每个数进行e次幂)
np.sum(np.exp(a)):无结果,因为不知道是在哪个维度求和
np.sum(np.exp(a),axis=0):10(每列求和,最后变成长度为10的一维数组)
np.sum(np.exp(a),axis=0,keepdims=True):1*10(取共10列的每一列最大值)
np.sum(np.exp(a),axis=1):100(每行求和,最后变成长度为100的一维数组)
np.sum(np.exp(a),axis=1,keepdims=True):100*1 (共取100行的每一行最大值,但仍保留数组形状)

验证:

import numpy as np
x = np.random.rand(3,4)
print(x)
print(np.exp(x))
print(np.sum(np.exp(x)))
print(np.sum(x,axis=0))
print(np.sum(x,axis=0,keepdims=True))
print(np.sum(x,axis=1))
print(np.sum(x,axis=1,keepdims=True))

结果:

[[0.50487326 0.1234154  0.97036974 0.78872956]
 [0.16459544 0.84769524 0.78609429 0.91375372]
 [0.67774643 0.63490272 0.20362158 0.65253967]]
[[1.65677553 1.13135429 2.63891998 2.20059893]
 [1.17891608 2.33426074 2.19480738 2.49366551]
 [1.96943447 1.88683857 1.22583418 1.92041186]]
22.83181752378712
[1.34721514 1.60601336 1.9600856  2.35502295]
[[1.34721514 1.60601336 1.9600856  2.35502295]]
[2.38738796 2.71213869 2.1688104 ]
[[2.38738796]
 [2.71213869]
 [2.1688104 ]]

 

原文链接:https://blog.csdn.net/WILDCHAP_/article/details/107630484

posted @ 2023-03-04 14:32  sqsq  阅读(149)  评论(0编辑  收藏  举报