Python 使用冒号的Numpy阵列切片
我正在努力学习numpy数组切片 但这是一种我似乎无法理解的语法 什么是Python 使用冒号的Numpy阵列切片,python,arrays,numpy,Python,Arrays,Numpy,我正在努力学习numpy数组切片 但这是一种我似乎无法理解的语法 什么是 a[:1]do 我用python运行了它 a = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]) a = a.reshape(2,2,2,2) a[:1] 输出: array([[[ 5, 6], [ 7, 8]], [[13, 14], [15, 16]]]) 有人能给我解释一下切片的原理吗。文档似乎没有回答这个
a[:1]
do
我用python运行了它
a = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
a = a.reshape(2,2,2,2)
a[:1]
输出:
array([[[ 5, 6],
[ 7, 8]],
[[13, 14],
[15, 16]]])
有人能给我解释一下切片的原理吗。文档似乎没有回答这个问题
另一个问题是,是否有一种方法可以使用
np.array(1:16)
或类似于python的东西,其中
x = [x for x in range(16)]
切片中的逗号用于分隔可能存在的各种尺寸。在第一个示例中,您正在重塑数据,使其具有4个维度,每个维度的长度为2。这可能有点难以可视化,因此,如果从二维结构开始,它可能更有意义:
>>> a = np.arange(16).reshape((4, 4))
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
>>> a[0] # access the first "row" of data
array([0, 1, 2, 3])
>>> a[0, 2] # access the 3rd column (index 2) in the first row of the data
2
如果要使用切片访问多个值,可以使用冒号表示范围:
>>> a[:, 1] # get the entire 2nd (index 1) column
array([[1, 5, 9, 13]])
>>> a[1:3, -1] # get the second and third elements from the last column
array([ 7, 11])
>>> a[1:3, 1:3] # get the data in the second and third rows and columns
array([[ 5, 6],
[ 9, 10]])
您也可以执行以下步骤:
>>> a[::2, ::2] # get every other element (column-wise and row-wise)
array([[ 0, 2],
[ 8, 10]])
希望有帮助。一旦这变得更有意义,您就可以通过使用None
或np.newaxis
或使用…
省略号来查看添加维度的内容:
>>> a[:, None].shape
(4, 1, 4)
您可以在这里找到更多信息:在我们继续的过程中,探索
形状和单个条目可能会有所收获
让我们从
>>> a = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
>>> a.shape
(16, )
这是一个长度为16的一维数组
现在让我们试试
>>> a = a.reshape(2,2,2,2)
>>> a.shape
(2, 2, 2, 2)
这是一个4维的多维数组
让我们看看0,1元素:
>>> a[0, 1]
array([[5, 6],
[7, 8]])
因为还有两个维度,所以它是一个由两个维度组成的矩阵
现在a[:,1]
说:取a[i,1
作为i
的所有可能值:
>>> a[:, 1]
array([[[ 5, 6],
[ 7, 8]],
[[13, 14],
[15, 16]]])
它提供了一个数组,其中第一项是a[0,1]
,第二项是a[1,1]
,用于回答问题的第二部分(生成序列值数组)您可以使用或。这两个选项都返回一个带有相应值范围的numpy数组。我是从笔记本上复制的,所以我可能会漏掉那一行,但我们假设它漏掉了