一、數組 的索引
1、一維數組的索引
import numpy
## 創建一維數組
arr = numpy.arange(16) ## 結果 [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
## 正向索引(從0開始依次0,1,2,...)
d1 = arr[4]
print(d1) #結果 4
## 反向索引(從-1開始依次-1,-2,-3,...)
d2 = arr[-1]
print(d2) #結果 15
## 多個索引用列表接收
d3 = arr[[-1,6,8]]
print(d3) #[15 6 8]
2、一維數組切片
arr = numpy.arange(16)
## 切片,不包含結束位置
d1 = arr[2:-1]
print(d1) #[ 2 3 4 5 6 7 8 9 10 11 12 13 14]
## 切片,不包含結束位置
d2 = arr[2:-1:3]
print(d2) #[ 2 5 8 11 14]
3、二維數組的索引和切片
#### 二維數組
arr = numpy.arange(16).reshape((4,4))
print(arr) #[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
## 獲取 第一行(注:索引是從0開始的)
d1 = arr[0,:] #第一個參數是行,第二個參數是列
print(d1) #[0 1 2 3] [ 1 11]
## 獲取第1,3行的前兩列
d2 = arr[[0,2],0:2]
#d2 = arr[::2,0:2:1]
print(d2) #[[0 1]
# [8 9]]
## 獲取固定行列的元素
d3 = arr[[0,2],[1,3]] #獲取第1行第2列 和第3行第4列的元素
print(d3) #[1,11]
4、布爾數組
## bool數組
arr_mask = numpy.array([0,1,2,3],dtype=numpy.bool)
print(arr_mask) #[False True True True]
5、布爾數組切片
索引的數組是二維則布爾維數爲一維,切行時行元素個數對應,切列時列對應,否則報錯
arr_mask = numpy.array([0,1,2,3],dtype=numpy.bool)
print(arr_mask)
arr = numpy.arange(16).reshape((4,4))
print(arr)
d = arr[arr_mask,:]
# d = arr[:,arr_mask]
print("data:\n",d)
bool 數組做索引,False 爲丟棄, True 爲選擇
多維數組切片
一維 arr[下標/切片]
二維 arr[行下邊或者切片,列下標或者切片]
三維 arr[塊下標或者切片,行,列]
四維 arr[堆下標或者切片,塊,行,列]
6、數組展開成一維數組
#創建數組
arr = numpy.arange(16).reshape((4,4))
## ravel按行展開
d1 = numpy.ravel(arr)
print(d1) #[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
## flatten()參數默認爲C,按行展開
d2 = arr.flatten('C')
print(d2) #[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
## flatten()參數爲F時,按列展開
d3 = arr.flatten('F')
print(d3) #[ 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15]
二、數組組合
1、vstack() 按行的方向(二維的垂直方向) 組合
arr1 = numpy.arange(10).reshape((2,5))
arr2 = numpy.arange(10).reshape((2,5))
print(arr1) #[[0 1 2 3 4]
# [5 6 7 8 9]]
print(arr2)
new_arr1 = numpy.vstack((arr1,arr2)) #按照行的方向進行拼接
print(new_arr1.shape) #(4,5) 4行5列的數組
print(new_arr1) #[[0 1 2 3 4]
# [5 6 7 8 9]
# [0 1 2 3 4]
# [5 6 7 8 9]]
new_arr2 = numpy.vstack([arr1,arr2]) #按照行的方向(垂直方向)進行拼接
print(new_arr2.shape) #(4,5)
print(new_arr2) #[[0 1 2 3 4]
# [5 6 7 8 9]
# [0 1 2 3 4]
# [5 6 7 8 9]]
2、hstack 按列的方向組合(二維的水平方向)
import numpy
arr1 = numpy.arange(10).reshape((2,5))
arr2 = numpy.arange(10).reshape((2,5))
print(arr1)
print(arr2)
new_arr1 = numpy.hstack((arr1,arr2)) #按照列的方向進行拼接
print(new_arr1.shape) #(2,10) 2行10列的數組
print(new_arr1) #[[0 1 2 3 4 0 1 2 3 4]
# [5 6 7 8 9 5 6 7 8 9]]
new_arr2 = numpy.hstack([arr1,arr2]) #按照列的方向進行拼接
print(new_arr2.shape) #(2,10)
print(new_arr2)
3、concatenate() 參數爲 拼接對象, axis(維度數)
import numpy
arr1 = numpy.arange(10).reshape((2,5))
arr2 = numpy.arange(10).reshape((2,5))
print(arr1)
print(arr2)
## (行,列)按第一個維度拼接 和vstack一樣
new_arr5 = numpy.concatenate((arr1,arr2),axis=0)
print(new_arr5.shape) #(4, 5)
print(new_arr5) #[[0 1 2 3 4]
# [5 6 7 8 9]
# [0 1 2 3 4]
# [5 6 7 8 9]]
## (行,列) 按第二個維度拼接 和hstack 一樣
new_arr6 = numpy.concatenate((arr1,arr2),axis=1)
print(new_arr6.shape) #(2, 10)
print(new_arr6) #[[0 1 2 3 4 0 1 2 3 4]
# [5 6 7 8 9 5 6 7 8 9]]
三、數組的拆分
1、
import numpy
# 創建一個二維數組
arr = numpy.arange(16).reshape((4,4))
print("arr:\n",arr)
# 拆分 ----平均拆分,必須能整除,否則報錯
new_arr = numpy.hsplit(arr,4) # 在列的方向上進行分割數組
print("new_arr:\n",new_arr)
print("new_arr:\n",type(new_arr[0]))
new_arr = numpy.vsplit(arr,4) # 在行的方向上進行分割數組
print("new_arr:\n",new_arr)
print("new_arr:\n",type(new_arr[0]))
# 在行的方向上進行分割數組
new_arr = numpy.split(arr,4,axis=0)
# 在列的方向上進行分割數組
new_arr = numpy.split(arr,4,axis=1)
print("new_arr:\n",new_arr)
print("new_arr:\n",type(new_arr[0]))