python中省略号三个点(...)的作用

本文探讨了Python中的ellipsis对象,如何在Numpy和Tensor操作中作为占位符,实现对多维数组选择切片的高效表达。通过实例演示,理解其作用相当于所有维度减去逗号数量,如a[…,:2]等同于a[:,:,:2]。
摘要由CSDN通过智能技术生成

1ellipsis

三个点在python中的类别名称叫做ellipsis,中文意思就是省略号。

type(...)
<class 'ellipsis'>

2 ellipsis在Numpy或者tensor中的应用

以pytorch中的tensor格式为例。先随机生成一个(4,3,4)尺寸的tensor。

import torch
a = torch.randn(4, 3, 4) # 随机生成一个(4,3,4)尺寸的tensor
print(a)
tensor([[[-1.0691,  1.1035,  1.1393, -0.2697],
         [ 0.7714, -0.8335, -1.3316,  1.6003],
         [-1.3023,  0.0086,  1.2506, -1.3495]],

        [[ 1.1887,  1.2299, -2.3907, -0.9398],
         [ 0.7684, -0.5810,  1.0292, -0.4403],
         [ 0.0410, -1.3440,  0.6224,  2.3383]],

        [[ 0.3019, -0.5783,  0.4214, -0.5811],
         [-1.7942, -0.8230, -0.9545, -0.9520],
         [ 0.4636, -0.6919, -0.4382,  0.6298]],

        [[-0.1962, -0.0933, -0.3654, -1.3060],
         [-0.0212,  0.7255, -2.2106, -0.3655],
         [ 0.1591, -0.5504, -1.0143, -1.7478]]])
print(a[..., :2])
tensor([[[-1.0691,  1.1035],
         [ 0.7714, -0.8335],
         [-1.3023,  0.0086]],

        [[ 1.1887,  1.2299],
         [ 0.7684, -0.5810],
         [ 0.0410, -1.3440]],

        [[ 0.3019, -0.5783],
         [-1.7942, -0.8230],
         [ 0.4636, -0.6919]],

        [[-0.1962, -0.0933],
         [-0.0212,  0.7255],
         [ 0.1591, -0.5504]]])

我们可以发现,a[…, :2]的输出就是前两个维度取所有,第三个维度只取前两列,可以推测出…的作用是代表取逗号前面的所有维度。
假设共n个维度,也就是如果后边有一个逗号分隔,则…是取前n-1个维度的所有。如果没有逗号分隔,则…是取所有维度的元素,也就和这个tensor本身没有任何区别。
结论:
…取的维度 = 所有维度 - 逗号个数

即a[…, :2]= a[:, :, :2]

2.1验证

print((a[...]= a).all())
tensor(True)
print((a[..., :2]= a[:, :, :2]).all())
tensor(True)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

little student

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值