numpy中的索引下标为None的各种情况
REF
https://zhuanlan.zhihu.com/p/486373530?utm_id=0
None实际上是增加了一个维度,它不是原维度的索引。
以一维为例
x = np.arange(3) # array([0, 1, 2])
( 注意,这个一维数组的shape是(3,),而不是(1,3),初学者很容易犯错。)
如果想把x的shape变成(1,3),只需要把None放在第一个维度的位置,以下两种写法等价:
x[None,:]
x[None]
结果如下:
array([[0, 1, 2]])
如果想把x的shape变成(3,1),只需要把None放在第二个维度的位置:
x[:,None]
结果如下:
array([[0],
[1],
[2]])
其实,None可以任意添加和组合,例如下面的写法:
x[None,:,None,None]
结果如下:
array([[[[0]],
[[1]],
[[2]]]])
这个数组的shape是(1,3,1,1)。
以二维为例
x = np.arange(6).reshape((2,3))
x如下:
array([[0, 1, 2],
[3, 4, 5]])
在第一个维度插入,以下三种写法等价:
x[None]
x[None,:]
x[None,:,:]
输出结果如下,shape为(1, 2, 3):
array([[[0, 1, 2],
[3, 4, 5]]])
在第二个维度插入,以下两种写法等价:
x[:,None]
x[:,None,:]
输出结果如下,shape为(2, 1, 3):
array([[[0, 1, 2]],
[[3, 4, 5]]])
在第三个维度插入:
x[:,:,None]
输出结果如下,shape为(2, 3, 1):
array([[[0],
[1],
[2]],
[[3],
[4],
[5]]])
更高维的情况以此类推。
这种写法一般在进行矩阵运算的时候会用到。比如:
x = np.arange(5)
x[:, None] + x[None, :]
这样可以很优雅地获得 列向量+行向量 的结果(划重点:优雅~):
array([[0, 1, 2, 3, 4],
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[3, 4, 5, 6, 7],
[4, 5, 6, 7, 8]])
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2021-08-16 Spring MVC异常处理
2021-08-16 Spring MVC 数据校验
2021-08-16 Spring MVC 拦截器(Interceptor)
2021-08-16 Spring MVC 表单标签库
2021-08-16 Spring MVC 数据格式化(Formatter)
2021-08-16 Spring MVC 类型转换器(Converter)
2021-08-16 Spring MVC @ModelAttribute注解