1. 程式人生 > >Python中numpy 陣列的切片操作

Python中numpy 陣列的切片操作

簡介

X[n0,n1]是通過 numpy 庫引用二維陣列或矩陣中的某一段資料集的一種寫法。 類似的,X[n0,n1,n2]表示取三維陣列,取N維陣列則有N個引數,N-1個逗號分隔。 以二維陣列為例:

import numpy as np
X = np.array([[0,1,2,3],[10,11,12,13],[20,21,22,23],[30,31,32,33]])

X 是一個二維陣列,維度分別為 0 ,1;為了方便理解多維,採取數中括號的方式 ‘[’ 確定維數,例如:從左往右,第 0 層 [] 表示第 0 維;第 1 層 [] 表示第 1 維;…以此類推。

取元素 X[n0,n1]

這是最基本的情況,表示取 第0維 的第 n0 個元素,繼續取 第1維 的第 n1個元素。如 X[2,2] 表示第0維第2個元素[20,21,22,23],然後取其第1維的第2個元素即 22;

切片 X[s0:e0,s1:e1]

這是最通用的切片操作,表示取 第0維 的第 s0 到 e0 個元素,繼續取 第1維 的第 s1 到 e1 個元素(左開右閉)。如 X[1:3,1:3] 表示第0維第(1:3)個元素[[10,11,12,13],[20,21,22,23]],然後取其第1維的第(1:3)個元素即 [[11,12],[21,22]];

切片特殊情況 X[:e0,s1:]

特殊情況,即左邊從0開始可以省略X[:e0,s1:e1],右邊到結尾可以省略X[s0:,s1:e1],取某一維全部元素X[:,s1:e1],事實上和Python 的 序列切片規則是一樣的。

常見的 X[:,0] 則表示 第0維取全部,第1維取0號元素;

示例程式碼

import numpy as np

X = np.array([[0,1,2,3],[10,11,12,13],[20,21,22,23],[30,31,32,33]])

# X 是一個二維陣列,維度為 0 ,1
# 第 0 層 [] 表示第 0 維;第 1 層 [] 表示第 1 維;

# X[n0,n1] 表示第 0 維 取第n0 個元素 ,第 1 維取第 n1 個元素
print(X[1,0])
# X[1:3,1:3] 表示第 0 維 取 (1:3)元素 ,第 1 維取第(1:3) 個元素
print(X[1:3,1:3])

# X[:n0,:n1] 表示第 0 維 取 第0 到 第n0 個元素 ,第 1 維取 第0 到 第n1 個元素
print(X[:2,:2])
# X[:,:n1] 表示第 0 維 取 全部元素 ,第 1 維取 第0 到第n1 個元素
print(X[:,:2])

# X[:,0]) 表示第 0 維 取全部 元素 ,第 1 維取第 0 個元素
print(X[:,0])

輸出結果

10
[[11 12]
 [21 22]]
[[ 0  1]
 [10 11]]
[[ 0  1]
 [10 11]
 [20 21]
 [30 31]]
[ 0 10 20 30]