我有一个数组:
a = array([[1,2,3],[3,4,5],[4,5,6]])
从这个只有前两列“a”的数组中切出一个1x2数组的最有效方法是什么?也就是说
array([[2,3],[4,5],[5,6]]) in this case.
ve7v8dk21#
二维numpy数组使用a[i,j](而不是a[i][j])进行索引,但是你可以对numpy数组和矩阵使用与Python中普通矩阵相同的切片表示法(只需将它们放在一个[]中):
a[i,j]
a[i][j]
[]
>>> from numpy import array >>> a = array([[1,2,3],[3,4,5],[4,5,6]]) >>> a[:,1:] array([[2, 3], [4, 5], [5, 6]])
n3ipq98p2#
这就是你要找的吗?
a[:,1:]
jogvjijk3#
引用documentation,基本片语法是i:j:k,其中i是起始索引,j是停止索引,并且k是步长(当k > 0时)。现在,如果没有给定i,则k > 0默认为0。否则,k < 0的i默认为n - 1(其中n是数组的长度)。如果未指定j,则默认为n(数组长度)。这是针对一维数组的。现在,二维数组是一种不同的东西,它的切片语法是a[rowrange, columnrange]。因此,如果您需要所有行,但只需要最后两列,就像您的示例一样,您可以:
i:j:k
i
j
k
k > 0
k < 0
n - 1
n
a[rowrange, columnrange]
a[0:3, 1:3]
这里,“[0:3]“表示从0到3的所有行,而“[1:3]“表示从列1到列3的所有列。现在,您可能想知道,即使只有3列并且编号从1开始,它也必须正确返回3列,即:第1栏、第2栏、第3栏这是这个语法的难点。第一列实际上是第0列。所以当你说“[1:3]“时,你实际上是在说给予我第1列和第2列。这是你想要的最后两列。(实际上没有第3列。)现在,如果你不知道你的矩阵有多长,或者你想要所有的行,你可以把那部分留空。
[0:3]
[1:3]
a[:, 1:3]
列也是如此。例如,如果你想除第一行外的所有列,你可以写
a[0:1,:]
现在,上面的答案a[:,1:]是如何工作的,因为当你说“[1:]“的列,它的意思是给予我一切除了列0,直到所有列的结束。即空的意思是'直到结束'。到现在为止,您必须认识到,逗号两边的任何内容都是我在上面第一次提到的一维情况的子集。即,如果您希望使用步长指定行,您可以编写
[1:]
a[::2,1]
在你的情况下
array([[2, 3], [5, 6]])
即a[::2,1]解释为:每隔一行,从最上面开始,只给我第二列。这花了我一些时间才弄明白。所以把它贴在这里,以防万一它对某人有帮助。
3条答案
按热度按时间ve7v8dk21#
二维numpy数组使用
a[i,j]
(而不是a[i][j]
)进行索引,但是你可以对numpy数组和矩阵使用与Python中普通矩阵相同的切片表示法(只需将它们放在一个[]
中):n3ipq98p2#
这就是你要找的吗?
jogvjijk3#
引用documentation,基本片语法是
i:j:k
,其中i
是起始索引,j
是停止索引,并且k
是步长(当k > 0
时)。现在,如果没有给定
i
,则k > 0
默认为0。否则,k < 0
的i
默认为n - 1
(其中n
是数组的长度)。如果未指定
j
,则默认为n
(数组长度)。这是针对一维数组的。
现在,二维数组是一种不同的东西,它的切片语法是
a[rowrange, columnrange]
。因此,如果您需要所有行,但只需要最后两列,就像您的示例一样,您可以:
这里,“
[0:3]
“表示从0到3的所有行,而“[1:3]
“表示从列1到列3的所有列。现在,您可能想知道,即使只有3列并且编号从1开始,它也必须正确返回3列,即:第1栏、第2栏、第3栏
这是这个语法的难点。第一列实际上是第0列。所以当你说“
[1:3]
“时,你实际上是在说给予我第1列和第2列。这是你想要的最后两列。(实际上没有第3列。)现在,如果你不知道你的矩阵有多长,或者你想要所有的行,你可以把那部分留空。
列也是如此。例如,如果你想除第一行外的所有列,你可以写
现在,上面的答案
a[:,1:]
是如何工作的,因为当你说“[1:]
“的列,它的意思是给予我一切除了列0,直到所有列的结束。即空的意思是'直到结束'。到现在为止,您必须认识到,逗号两边的任何内容都是我在上面第一次提到的一维情况的子集。即,如果您希望使用步长指定行,您可以编写
在你的情况下
即
a[::2,1]
解释为:每隔一行,从最上面开始,只给我第二列。这花了我一些时间才弄明白。所以把它贴在这里,以防万一它对某人有帮助。