为什么要写这个博客呢?当我第一次在代码中看到 A[0, ...] ,我还以为代码出bug了。随后我就测试了一下,没想到不仅没bug,而且功能还很强大,故写一个博客供大家参考。
创建随机数组
import numpy as np
a = np.random.randn(3,3,3)
print(a)
输出结果:
array([[[ 0.48999556, 0.34881712, -0.50757021],
[ 1.51518878, -0.4822477 , 1.12546929],
[-0.39576487, -1.83399197, 1.25517991]],
[[ 0.70912873, -0.81894408, -0.48782852],
[ 0.21375399, -0.02001845, -0.96130337],
[-0.1990111 , -1.32020791, 1.32054848]],
[[ 0.75863401, -0.44941969, -1.41434435],
[-0.28707215, -0.372091 , -0.29244595],
[ 0.54015166, 1.09935533, 1.41316135]]])
在开始下面的测试之前,需要大家理解Numpy中axis的定义,如果不清楚的话,可以参考我的这一篇博客: 理解Numpy中axis的正确姿势。
测试一
a[0, ...]
输出结果:
array([[ 0.48999556, 0.34881712, -0.50757021],
[ 1.51518878, -0.4822477 , 1.12546929],
[-0.39576487, -1.83399197, 1.25517991]])
测试一理解:指定a数组的第0维度下第0个位置的数组,...代表选取剩余维度下所有的内容,并保持该内容的维度不变。
测试二
a[1, ..., 2]
输出结果:
array([-0.48782852, -0.96130337, 1.32054848])
测试二理解:指定a数据第0维度下的第1个位置的数组,...代表选取第1维度下的所有内容,2代表第三维度下第二个位置所代表的数组
测试三
a[1, 2, ...]
输出结果:
array([-0.1990111 , -1.32020791, 1.32054848])
测试三理解:指定a第0维度下的第一个位置,2代表第1维度下的第2个位置,...代表第三维度下的所有内容
测试四
a[1, 2, 2]
输出结果:
1.320548483581948
测试四理解:取指定位置的数值
总结
这个[...]的方式切片理解起来较抽象,而且搜的时候还不知道搜什么关键字。那主要的理解重点在于:知道每一维度代表什么,...表示选择所有,就ok了
本文为作者原创,转载需注明出处!