在numpy / scipy中切割数组

时间:2010-04-27 22:59:54

标签: python numpy scipy

我有一个像:

这样的数组
a = array([[1,2,3],[3,4,5],[4,5,6]])

切出1x2阵列的最有效方法是什么?只有前两列“a”?

即,

array([[2,3],[4,5],[5,6]]) in this case.

感谢。

3 个答案:

答案 0 :(得分:22)

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

>>> from numpy import array
>>> a = array([[1,2,3],[3,4,5],[4,5,6]])
>>> a[:,1:]
array([[2, 3],
       [4, 5],
       [5, 6]])

答案 1 :(得分:5)

这是你要找的吗?

a[:,1:]

答案 2 :(得分:2)

或换句话说(引用documentation) 基本切片语法是i:j:k其中i是起始索引,j是停止索引,k是步骤(k> 0)

现在,如果&#39;我&#39;没有给出它的默认值为0表示k> 0和n - 1表示k <0。 0。如果没有给出j,则默认为n。

这是一维数组。 现在二维数组是一个不同的野兽。切片语法是[rowrange,columnrange]

因此,如果您想要所有行,但只需要最后两列,就像您的情况一样 一个[0:3,1:3]。

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

现在您可能想知道,即使您只有3列且编号从1开始,所以从技术上讲,此命令必须返回3列。即第1列,第2列,第3列。这是此语法的棘手部分。您必须从第一个数字开始计数。所以当你说[1:3]时,你实际上是在说第2栏和第3栏。这是你想要的最后两列。

现在,如果您不知道矩阵有多长,或者您想要所有行,您可以将该部分留空。 即

a [:,1:3]也可以。

同样适用于列。即如果你想说,所有的列,但只是第一行,你会写

一个[0:1,:]

现在,上面的回答[:,1:]如何工作是因为当你对列说[1:]时,它意味着在第一列之后给我任何东西,直到所有列的结尾。即空洞意味着直到结束。

到目前为止,您必须意识到逗号两边的任何内容都是我上面提到的一维案例的子集。即如果要使用步长指定行,则可以编写 一个[2,1 ::]

在你的情况下将返回 数组([[2,3],        [5,6]])

即命令阐明为:给我所有行,一次取2个。另外,我只给出最后两列。

我花了一些时间才弄明白。所以在这里粘贴它,以防它有助于某人。