數組的索引、組合和拆分

一、數組 的索引

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]))


 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章