Numpy中的数组理解

numpy中数组的下标从0开始

理解一维数组

首先创建一个一维数组a,数组a 的内容为:[0 1 2 3]

import numpy as np
a = np.array(list([0,1,2,3]))
print(a)

输出:
[0 1 2 3]

理解二维数组

首先创建一个二维数组b,数组 b 的内容为:注意:最内层的【】内为一行

[[0 1 2 3]

[4 5 6 7]]

b = np.array(range(8)).reshape((2,4))
print(b)
b

输出:
[[0 1 2 3]
 [4 5 6 7]]

array([[0, 1, 2, 3],
       [4, 5, 6, 7]])

第一维是行,第一维的第一行元素的 index 是 0,第二行元素的 index 是 1,以此类推。第二维是列,第二维的第一列元素的 index 是 0,第二列元素的 index 是1,以此类推。

理解三维数组

创建一个三维数组 c,数组 c 的内容为:

[ 0 1 2 3 ]

[ 4 5 6 7 ]  

[ 8 9 10 11 ]

[12 13 14 15 ]

[ 16 17 18 19 ]

20 21 22 23 ] ] ]

c = np.array(range(24)).reshape((3,2,4))
print(c)

输出:
[[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]

 [[16 17 18 19]
  [20 21 22 23]]]

c的shape是 (3, 2, 4),3通道2行4列,最外层[],里面有三个[],所以shape是3,第二层是[],里面有2个[],所以shape是2

numpy数组都有[]标记,其对应关系:axis=0对应最外层的[],axis=1对应第二外层的[],…,axis=n对应第n外层的[]。以三维数组为例,两者关系如下表所示:

理解numpy数组中axis的设置

这里使用了博主西北种田文的方法“括号最大块法”。

博客链接为:Python:一文让你彻底理解numpy中axis=-1/0/1/2… [实例讲解:np.argmax(axis= -1 0 1 2) np.sum(aixs= -1 0 1 2)]

括号最大块法有且仅有两步:

第一步:由axis = value,找对应[]里的最大单位块。(np.sum()拆掉此层[],np.argmax()不拆此层[])

第二步:对单位块进行计算,这里又分为两种情况:

当单位块是数值时,直接计算
当单位块是数组时,对应下标元素进行计算
接下来对上述方法进行补充说明:

首先,最大单位块就是某层[]里包裹的最大结构块。比如:

[1,2,3]:[]里最大的单位块是数值 1 2 3。
[[1,2],[3,4]]:最外层[]里最大单位块是[1,2] 和 [3,4],第二层[]里最大单位块是1,2 和 3,4。
[[[1,2],[3,4]],[[5,6],[7,8]]]:最外层[]里最大单位块是[[1,2],[3,4]]和[[5,6],[7,8]],第二层[]里最大单位块是[1,2]和[3,4] 还有 [5,6]和[7,8],第三层[]里最大单位块是1,2 和 3,4 和 5,6 和 7,8。
其次,最大单位块是数组时,对应下标元素的计算方法为:

对于numpy二维数组[[1,2],[3,4]]。
axis=0,最外层[],有一对,其里包含两个最大块[1,2]、[3,4],这两个块1和3、2和4即为对应。
axis=1,第二层[],有两对,两个[]都为数值,直接计算。
对于numpy三维数组[[[1, 2],[3, 4]], [[5, 6],[7, 8]]]。
axis=0,最外层[],有一对,其里包含两个最大块[[1, 2],[3, 4]]、 [[5, 6],[7, 8]],这两个块1和5、2和6、3和7、4和8即为对应。
axis=1,第二层[],有两对,第一个[]最大块为:[1, 2]、[3, 4],其中1和3、2和4对应;第二个[]最大块为:[5, 6],[7, 8],其中5和7、6和8对应。
axis=2,第三层[],有四对,4个[]内都是数值,直接计算。

参考NumPy数组维度axis参数理解_zhaoguanhua的博客-CSDN博客_numpy维度理解中的图理解sum操作时axis设置   数组维度 3 4 2

axis=0 

axis=1

axis=2

 参考 Python的numpy中axis=0、axis=1、axis=2解释_sally的jerry-CSDN博客_axis对argmax函数中axis设置的理解

np.argmax():取数组中元素最大值的下标值

一维数组

二维数组
axis=0

 第一步:axis=0对应最外层[],其内最大单位块为:[ 3, 6, 6, 2]、 [ 4, 7, 11, 2]和[ 5, 9, 1, 3]
第二步:单位块是数组,两者对应下标元素进行计算,即:argmax([3,4,5])、argmax([6,7,9])、argmax([6,11,1])、argmax([2,2,3]),得到4个最大值索引值:2、2、1、2,得到索引值数组:[2 2 1 2]

axis=1


第一步:axis=1对应第二层[],其内最大单位块为:3, 6, 6, 2 和 4, 7, 11, 2 和 5, 9, 1, 3
第二步:单位块是数值,直接进行计算,即:argmax([3,6,6,2])、argmax([4,7,11,2])、argmax([5,9,1,3]),得到3个最大值索引值:1、2、1,得到索引数组:[1 2 1]

 三维数组
axis=0


第一步:axis=0对应最外层[],其内最大单位块为:

第二步:单位块是数组,三者对应下标元素进行计算,如图:

即:argmax([1,-1,21)、argmax([5,7,6])、argmax([5,-5,-5])、argmax([2,2,2])、argmax([9,9,9])、argmax([-6,6,36])…以此类推,得到索引值数组:

axis=1


第一步:axis=1对应第二层[],其内最大单位块为:
第一个[]内最大单位块:

 

 第二个[]内最大单位块:

 第三个[]内最大单位块:

 第二步:各[]内单位块是数组且都为三块,三者对应下标元素进行计算,即:
第一个[]内,三块对应下标,如图:

计算:argmax([1,9,-3)、argmax([5,-6,7])、argmax([5,2,-9])、argmax(2,8,1)
以此类推:第二个[]、第三个[],得到索引值数组:


axis=2


第一步:axis=2对应第三层[],其内最大单位块为:
1,5,5,2
9,-6,2,8
-3,7,-9,1

 -1,7,-5,2
9,6,2,8
3,7,9,1

21,6,-5,2
9,36,2,8
2,7,66,1

第二步:单位块是数值,直接进行计算,即:
argmax([1,5,5,2])
argmax([9,-6,2,8])
argmax([-3,7,-9,1])
argmax([-1,7,-5,2])

以此类推,得到索引数组:


axis=-1

axis=-1,表示在当前数组最后一维度操作,三维数组中axis=0/1/2,那么axis=-1即等价于axis=2,所以其结果与axis=2相同!
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值