2017-07-26 67 views
1

代碼:逗號分隔範圍機制在Python中如何工作?

import numpy as np 

z = np.array([[1,3,5],[2,4,6]]) 

print(z[0:, :2]) 

答:

[[1, 3] [2, 4]] 

我是一個Python初學者,我是求解互動練習時,上述問題出現了。

我無法理解,在這種情況下z [0 :,:2]是如何工作的?如果可能,請幫我理解這種情況。

+0

的索引符號的第一部分表示的行(第一軸),而第二個指示所述列或第二軸。在這種情況下,您可以從第一列到第三列進行選擇,因爲':2'包含'0,1'列。 – Kasramvd

回答

3

你可以閱讀有關numpy的切片和索引的位置:

https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html

在這種情況下,0:的意思是「所有行,從第0行開始並且一直到結尾」(您也可以使用等效的:,這意味着「所有行,從開始和結束「)。

:2的意思是「所有列,從頭開始,直到(但不包括)列2」。

合起來,z[0:, :2]表示「包含所有行和前兩列的z的部分」。列出的第一個維度是行,第二個維度是列。如果你的數組是3D的,你可以用另一個逗號包含另一個維度,等等。

1

首先你要得到所有行(0:相同:):

[[1,3,5], 
[2,4,6]] 

然後你問列0和1(:2相同0:2這意味着從0到2獨家) :

[[1,3], 
[2,4]] 
0

z[0:, :2]選擇在所有的所有元素(即,兩個)的行(0:選擇從0開始行索引的範圍),並在所述第一兩列(:2選擇列索引0和1)

column 0 1 2 
-------------- 
row 0 | 1 3 5 
row 1 | 2 4 6 
0

這是numpy數組的一個特性,在本例中適用於2D數組。

如果z = np.array([l0, l1, l2, l3])其中L0,L1,L2,L3是列表,

然後z[1:3,2:5] = [l0[2:5], l1[2:5]]

所以第一片道理也適用於外列表中,而第二個觀點也適用於內部列表。這可以推廣到3D numpy的陣列等

這裏的DOC: https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html