【Python】[…,0,0]和[:,0,0]是什么意思呢

在看pytorch代码时经常会看见 […,0,0][:,0,0]两种形式,但是他们代表什么呢?

下面举个例子来讲:

【Python】[…,0,0]和[:,0,0]是什么意思呢

随机生成shape为[2,3,2,2]的数组,姑且看成2个batch,每个batch有3个通道,每个通道大小2*2。

; 1、 [:] 的含义

例1:

【Python】[…,0,0]和[:,0,0]是什么意思呢

输出是原数组:

第一个结果:所有batch中,第0个通道中所有元素。

【Python】[…,0,0]和[:,0,0]是什么意思呢

第二个结果:所有batch中,第0个通道,第1行的所有元素。

【Python】[…,0,0]和[:,0,0]是什么意思呢

例2:

【Python】[…,0,0]和[:,0,0]是什么意思呢

第一个结果:第0个batch中,所有通道的所有元素。

【Python】[…,0,0]和[:,0,0]是什么意思呢

第二个结果:所有batch中,所有通道中,第1行的所有元素。

【Python】[…,0,0]和[:,0,0]是什么意思呢

结论:结合例1和例2可以看出来, :可以代表的是某一个、单个维度所有的元素,查找元素与数组访问一致,从前往后查,后面无参数默认所有元素。

2、 [...] 的含义

例3:

【Python】[…,0,0]和[:,0,0]是什么意思呢

输出是原数组:

第一个结果:所有batch中,所有通道中,所有行中,第0列的元素,同一通道中的元素组成一行。

【Python】[…,0,0]和[:,0,0]是什么意思呢

第一个结果:所有batch中,所有通道中,所有行中,第1列的元素,同一通道中的元素组成一行。

【Python】[…,0,0]和[:,0,0]是什么意思呢

例4:

【Python】[…,0,0]和[:,0,0]是什么意思呢

输出是原数组:

【Python】[…,0,0]和[:,0,0]是什么意思呢

第二个结果:所有batch中,所有通道中,第1行,第1列的元素。

【Python】[…,0,0]和[:,0,0]是什么意思呢

例5:

【Python】[…,0,0]和[:,0,0]是什么意思呢
输出是原数组:
【Python】[…,0,0]和[:,0,0]是什么意思呢
结论:结合例3、4、5可以看出来, ...可以代表多个、不同维度的元素,查找元素顺序可以看作从后向前找。

; 3、 [...][:] 等价关系

如果没有太明白没关系,看下面这个例子更为直观:

例6:

【Python】[…,0,0]和[:,0,0]是什么意思呢

可以看出来 ...:是可以相互等价的:

上图第一个为例, [...,0][:,:,:,0],一个 ...可以代表三个 :,同理,第二个 [...,0,0][:,:,0,0],一个 ...可以代表两个 :,所以说 [...]代表了前面所有纬度的数据,而 [:]只是代表一个纬度的数据。

另外,在另一个博主的博客中提到:

the x[…] = … modifies x in-place;
It’s like x[:] = … but works with arrays of any dimension (including 0d). In this context x isn’t just a number, it’s an array.

Slicing: Important use of Ellipsis (…) is in slicing higher-dimensional data structures.

在引用高维数组时,使用 [...][:]引用更方便,确实如此。

4、Tips

Tip 1:

[...]只能在使用引用的时候出现一次,以下都是不可行的:

在这里是创建了一个高维数组: a = np.random.rand(3,3,3,3,3,3)

【Python】[…,0,0]和[:,0,0]是什么意思呢

可以看到报错信息是 IndexError: an index can only have a single ellipsis ('...'),意思是你只能有一个省略号。

; Tip 2:

当然 [...][:]是可以混合使用的,没有先后顺序:

【Python】[…,0,0]和[:,0,0]是什么意思呢

5、总结

简单来讲:

一个 [:]单纯的代表一个维度,在使用低维数组的时候使用比较灵活,查找元素从前向后;

一个 [...]代表多个维度,多个维度指的是连续的维度,在使用高维数组的时候比较灵活,查找元素从后向前;

一个 [...]相当于连续的多个 [:]使用,但是一个 [...]只能在一次引用当中使用一次;

[...]可以与多个 [:]在引用中混合使用;

参考博客:

多个维度指的是连续的维度,在使用高维数组的时候比较灵活,查找元素从后向前;

一个 [...]相当于连续的多个 [:]使用,但是一个 [...]只能在一次引用当中使用一次;

[...]可以与多个 [:]在引用中混合使用;

参考博客:

python numpy 里面的[:, None]是个什么鬼?[…, None]呢?

Original: https://blog.csdn.net/g944468183/article/details/124473886
Author: 晴明大大
Title: 【Python】[…,0,0]和[:,0,0]是什么意思呢

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/708247/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球