numpy中...与np.newaxis组合索引的含义及结果差异咨询
NumPy中
...与np.newaxis的用法解析 先看你给出的测试代码(补充必要的导入语句):
import numpy as np test_1 = np.zeros((2, 2)) test_2 = np.zeros((2, 2, 1)) print(test_1[..., np.newaxis]) print(test_1[np.newaxis])
执行结果:
[[[0.] [0.]] [[0.] [0.]]] [[[0. 0.] [0. 0.]]]
1. ...的含义
在NumPy里,...是**Ellipsis(省略号)**的简写,作用是替代数组中「所有未被明确指定的维度」,相当于多个冒号:的组合:
- 对于2维数组
test_1,...就等价于:(取所有行)和:(取所有列),也就是test_1[..., np.newaxis]和test_1[:, :, np.newaxis]完全等价。 - 如果是3维数组,
...就等价于::,以此类推。
2. 两行索引代码输出不同的原因
np.newaxis的作用是在指定位置新增一个大小为1的维度,而...和np.newaxis的位置决定了新增维度的位置:
test_1[..., np.newaxis]:...占了原数组的所有维度(前两个维度),np.newaxis放在最后,所以是在原数组的最后一个维度之后新增维度。原数组形状(2,2)变成(2,2,1),每个元素都被包裹成单元素子数组,对应第一个输出结构。test_1[np.newaxis]:np.newaxis放在最前面,也就是在原数组的第一个维度之前新增维度。原数组形状(2,2)变成(1,2,2),相当于把整个原数组当成一个元素,套进了新的外层数组里,对应第二个输出结构。
简单说就是:前者给每个元素加了一层「小包装」,后者给整个数组套了一层「大盒子」,最终的数组结构自然不同。
内容的提问来源于stack exchange,提问作者rogerhenry
相关产品推荐
相关产品推荐

