Python 在Numpy/Scipy中切片阵列

Python 在Numpy/Scipy中切片阵列,python,numpy,scipy,Python,Numpy,Scipy,我有这样一个数组: a = array([[1,2,3],[3,4,5],[4,5,6]]) 从这个只有前两列“a”的1x2数组中切出一个最有效的方法是什么 i、 e 这就是你要找的吗 a[:,1:] 二维numpy数组使用a[i,j](而不是a[i][j])进行索引,但是可以对numpy数组和矩阵使用与python中普通矩阵相同的切片表示法(只需将它们放在一个[]): >>>从numpy导入数组 >>>a=数组([[1,2,3],[3,4,5],[4,5,6]] >>>a[:,1:] 数组

我有这样一个数组:

a = array([[1,2,3],[3,4,5],[4,5,6]])
从这个只有前两列“a”的1x2数组中切出一个最有效的方法是什么

i、 e


这就是你要找的吗

a[:,1:]

二维numpy数组使用
a[i,j]
(而不是
a[i][j]
)进行索引,但是可以对numpy数组和矩阵使用与python中普通矩阵相同的切片表示法(只需将它们放在一个
[]
):

>>>从numpy导入数组 >>>a=数组([[1,2,3],[3,4,5],[4,5,6]] >>>a[:,1:] 数组([[2,3], [4, 5], [5, 6]]) 引用一下,基本切片语法是
i:j:k
,其中
i
是起始索引,
j
是停止索引,
k
是步骤(当
k>0
时)

现在,如果未给出
i
,则如果
k>0
,则默认为0。否则
i
对于
k<0
(其中
n
是数组的长度)默认为
n-1

如果未给出
j
,则默认为
n
(数组长度)

这是一个一维数组

现在,二维数组是另一种野兽。它的切片语法是
a[rowrange,columnrange]

因此,如果您需要所有行,但只需要最后两列,就像您的情况一样,您可以:

a[0:3, 1:3]
此处,“
[0:3]
”表示从0到3的所有行。“
[1:3]
”是指从第1列到第3列的所有列

现在,正如您可能想知道的,即使您只有3列并且编号从1开始,它也必须返回3列,对吗?i、 e:第1栏、第2栏、第3栏

这是这个语法中棘手的部分。第一列实际上是第0列。所以当你说“
[1:3]
”时,你实际上是在说给我第1列和第2列。哪两列是您想要的最后两列。(实际上没有第3列。)

现在,如果您不知道矩阵的长度,或者您想要所有的行,那么您可以将该部分留空。 i、 e

列也是如此。i、 如果你想说,除了第一行以外的所有列,你可以写

a[0:1,:]
现在,上面的答案
a[:,1://code>是如何工作的,因为当你对列说“
[1://code>”时,它意味着给我除了列0之外的所有内容,直到所有列的末尾。i、 e empty的意思是“直到结束”

现在你们必须意识到,逗号两边的任何东西都是我前面提到的一维情况的子集。i、 e如果要使用步长指定行,可以编写

a[::2,1]
在你的情况下,它会回来

array([[2, 3],
       [5, 6]])
i、 e.
a[::2,1]
解释为:每隔一行给我一行,从最上面的开始,只给我第二列


我花了一些时间才弄明白。因此,将其粘贴到此处,以防万一它对某人有所帮助。

您的Q“1x2”中的示例结果如何。。。?它是如何拥有前两列的?我一定是糊涂了…@Alex:看到结果我想他指的是最后两列:)和1x2。。。好。有3个由2个元素组成的数组,可以这样看;)你完全正确,+1这条规则只适用于二维数组吗?@IvanBalashov不,你也可以用它来处理更高的维度。
a[0:1,:]
a[::2,1]
array([[2, 3],
       [5, 6]])