2010-04-27 37 views
11

我有这样一个数组:数组切片/ SciPy的

a = array([[1,2,3],[3,4,5],[4,5,6]]) 

什么是切出一个1x2的阵列出这一点,只有“一”的前两列的最有效方法是什么?

即,

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

感谢。

+3

这个例子如何导致你的Q“1x2”...?它是如何具有_first_两列的?我一定很困惑... – 2010-04-28 01:43:13

+2

@亚历克斯:看到结果我期望他的意思是最后两列:) 和1x2 ...好。有2个元素的3个数组,你可以看到它;)你完全正确,但是,+1 – Wolph 2010-04-28 01:49:09

+0

是的,我认为这是一个错字。修复它 – mithunpaul 2017-09-24 21:37:33

回答

18

二维numpy的阵列使用a[i,j](不a[i][j])收录,但你可以使用Python普通矩阵您可以使用相同的切片符号与numpy的阵列和矩阵(只是把它们放在一个[]) :

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

这个规则是否仅适用于二维数组? – 2016-06-19 10:27:40

+0

@IvanBalashov不,你也可以使用它来获得更高的维度。 – Demento 2017-09-23 17:39:21

4

这是你在找什么?

a[:,1:] 
1

或者换言之(引述documentation) 基本切片语法是I:Y:k,其中i是起始索引,j是停止索引,而k是步骤(k> 0 )

现在,如果'i'没有被给出,则对于k> 0,其缺省值为0,对于k < 0,缺省值为0。如果j没有给出,它默认为n。

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

所以如果你想要所有的行,但只是最后两列,就像你的情况,你做 a [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:],这意味着在第一列之后给我任何东西,直到所有列结束。即空虚意味着'直到结束'。

现在你必须认识到,逗号两边的任何东西都是我上面首先提到的一维情况的一个子集。一世。e如果您想使用的步长指定你行,你可以写一个 [:: 2,1]

而你的情况将返回 阵列([2,3], [5,6] )

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

这花了我一些时间弄清楚。所以粘贴在这里,以防万一有人帮助。