numpy 中的axis

numpy中有很多函数都用到了axis,在一纬就不说了,二维的时候,axis=0代表对行进行最大值选取,此时对每一列进行操作;axis=1代表对列进行最大值选取,此时对每一行进行操作。到了高维就开始不知所措了。
下面以argmax为例子。
首先,有axis的函数操作,纬度会减1。
import numpy as np
a=np.arange(64)
np.random.shuffle(a)
a=a.reshape(2,4,8)
b=a.argmax(axis=0)
print(a.shape)
print(b.shape)

并且shape会变为去掉所操作的axis之后的shape,例如shape=(2,3,6),如果axis=0,经过函数变化后的shape=(3,6),如果axis=1,经过函数变化后的shape=(2,6),不管多少纬度都是这样。
那么,究竟axis是怎么看起来清晰呢。以4维为例。
现有一数组:
a=
[[[[54 48 4 51 53 25 30 45]
[43 6 59 46 32 22 35 12]]

[[20 21 8 24 2 42 26 44]
[19 52 47 56 15 5 57 28]]]

[[[ 3 0 40 50 33 31 55 23]
[39 7 38 18 17 10 13 11]]

[[ 9 16 27 58 14 49 60 61]
[63 62 41 36 1 29 37 34]]]]
如果a.argmax(axis=0)
变化后的结果是:
[[[0 0 1 0 0 0 1 0]
[0 1 1 1 1 0 1 0]]

[[1 1 0 0 0 0 0 0]
[1 1 1 0 0 0 0 0]]]
怎么来的呢,这里axis=0,我们进入第一个【】,然后剩下的内容将分为2部分。
[[[54 48 4 51 53 25 30 45]
[43 6 59 46 32 22 35 12]]

[[20 21 8 24 2 42 26 44]
[19 52 47 56 15 5 57 28]]]
和:
[[[ 3 0 40 50 33 31 55 23]
[39 7 38 18 17 10 13 11]]

[[ 9 16 27 58 14 49 60 61]
[63 62 41 36 1 29 37 34]]],试着将上面两个重合,上面数字大取0,下面数字大取1,是不是和结果一样呢。
如果a.argmax(axis=1)
变化后的结果是:
[[[0 0 1 0 0 1 0 0]
[0 1 0 1 0 0 1 1]]

[[1 1 0 1 0 1 1 1]
[1 1 1 1 0 1 1 1]]],这个又是怎么来的呢。
首先这里我们要进入第二个【】,在进去之前,再来看看上面的shape的变化情况,在axis=0的时候,我们是直接丢掉最外面的[],然后我们在相同位置比较大小,这样刚刚也满足了shape的变化,那么当axis=1时,我们应该留下第一层的【】,也就是axis=0的那层[],现在我们有一个空的[].
我们进入第二层[],一共有2个第二层,一个一个来,上面的第二层是:
[[54 48 4 51 53 25 30 45]
[43 6 59 46 32 22 35 12]]
和:
[[20 21 8 24 2 42 26 44]
[19 52 47 56 15 5 57 28]],上下对齐取大,得到:
[[0 0 1 0 0 1 0 0]
[0 1 0 1 0 0 1 1]],填入一地步留下的[],
[[[0 0 1 0 0 1 0 0]
[0 1 0 1 0 0 1 1]],]
下面还有个第二层,
[[ 3 0 40 50 33 31 55 23]
[39 7 38 18 17 10 13 11]]

[[ 9 16 27 58 14 49 60 61]
[63 62 41 36 1 29 37 34]]
上下对齐取大,得到:,得到
[[1 1 0 1 0 1 1 1]
[1 1 1 1 0 1 1 1]]
填入前面得到的
[[[0 0 1 0 0 1 0 0]
[0 1 0 1 0 0 1 1]],]。
得到
[[[0 0 1 0 0 1 0 0]
[0 1 0 1 0 0 1 1]]

[[1 1 0 1 0 1 1 1]
[1 1 1 1 0 1 1 1]]]
如果a.argmax(axis=2)
变化后的结果是:
[[[0 0 1 0 0 0 1 0]
[0 1 1 1 1 0 1 0]]

[[1 1 0 0 0 0 0 0]
[1 1 1 0 0 0 0 0]]]
我们该进入第3[]去,进去之前,我们有要留下前2级的[],就是
[
[],
[],
]
在这个里面:
[
[],此中括号有下面两个,
[],
]
[54 48 4 51 53 25 30 45]
[43 6 59 46 32 22 35 12]

[20 21 8 24 2 42 26 44]
[19 52 47 56 15 5 57 28]
对齐,比较,得到:
[0 0 1 0 0 0 1 0]
[0 1 1 1 1 0 1 0]
填入得到:
[
[[0 0 1 0 0 0 1 0]
[0 1 1 1 1 0 1 0]],
[],
]
以此类推。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值