numpy中keepdims的理解


老鸟请直接看总结

预备知识——准确理解numpy中数组的维度

请看下面的问题
Q1:
我们数学中的向量是如何在numpy中表示的?例如A=[1,2,3]

A:            B:
[[1 2 3]]     [1 2 3]

答案:A
Q2:
numpy中的[1 2 3]的维度是多少?

A:         B:
(3,1)      (3,)

答案:B

Q3:
你能够准确写出维度为(2,3,4)的numpy矩阵吗?(元素任意)
答案:

[[[ 1  2  3  4]
  [ 5  6  7  8]
  [ 9 10 11 12]]

 [[13 14 15 16]
  [17 18 19 20]
  [21 22 23 24]]]

如果你能够正确回答以上问题,那么可以直接进入正文。
如果不能,请参见numpy中维度的正确理解姿势

keepdims

根据预备知识,我们达成几个共识

  • 维度:矩阵的维度用一个元组(tuple)表示,如(3,),(2,3),(2,3,4)
  • 维数:元组的元素个数即矩阵的维数,如(3,),(2,3),(2,3,4)对应的矩阵维数分别是1,2,3.
  • 矩阵的轴(axis):矩阵的轴与维度对应,维度的第一个元素代表的轴是axis=0,第二个元素代表的轴是axis=1.如维度为(2,3,4)的矩阵axis=0即为2代表的维;再如数学中的2×3矩阵(即维度为(2,3))axis=0即为列(列方向),axis=1即为行(行方向)。

作为引子,我们来看一个numpy.sum求和函数

官网手册的用法是

numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<class numpy._globals._NoValue>)

例如对这个矩阵的每一行求和
[ 1 2 3 4 5 6 7 8 9 ] \left[ \begin{matrix} 1 &amp; 2 &amp; 3 \\ 4 &amp; 5 &amp; 6 \\ 7 &amp; 8 &amp; 9 \end{matrix} \right] 147258369
也即变成
[ 6 15 24 ] \left[ \begin{matrix} 6 \\ 15\\ 24 \end{matrix} \right] 61524
可以看出,我们是沿着行方向把矩阵元素求和了,所以axis=1,但是如果只用axis=1这个参数,会出现问题,请看

import numpy as np
a=np.arange(1,10).reshape(3,3)
print(a)
print(np.sum(a,axis=1))
[[1 2 3]
[4 5 6]
[7 8 9]]
[ 6 15 24]

发现问题了吗?结果应该是一个(3,1)的列向量

[[ 6]
 [15]
 [24]]

但是结果是

[ 6 15 24]

这样一个(3,)矩阵。元素正确,但是维度错了。
这是因为仅仅定义axis=0的numpy求和,和数学中的求和是不一样的!仅仅指定axis,numpy.sum会沿着这个维度求和没错,但是同时也把这个维度消灭了!.维度被消灭了,所以结果少了一维。
那么正确方式是什么呢?——添加keepdims=True这个参数
我们先来看结果

import numpy as np
a=np.arange(1,10).reshape(3,3)
print(a)
print(np.sum(a,axis=1,keepdims=True))
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[ 6]
 [15]
 [24]]

喏,好使了。解释一下keepdims=True这个参数的意思
从字面上看keepdims就是保持维数的意思,其实它的功能也确实跟他的名字一样这么直白——保持矩阵维数不变。以前是(3,3)2维,现在是(3,1)2维。因为对axis=1进行了求和,所以它的长度从3变成了1.
我们来看下官网手册对该参数的描述
在这里插入图片描述
框框中的话是——如果该参数设置为True,那么被减少的那个轴会以维度1保留在结果中
翻译到这已经很直白了,希望大家能够理解。

总结

对axis进行指定轴操作会使矩阵降维,使用keepdims=True会使消失的轴保留,并保持维度为1。

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值