2010-04-27 61 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列。

這花了我一些時間弄清楚。所以粘貼在這裏,以防萬一有人幫助。