NumPy數值計算基礎(數組的變化)

變化數組形態 

1.組合數組
    使用 hstack 函數實現數組橫向組合:np.hstack((arr1,arr2))
    使用 vstack 函數實現數組縱向組合:np.vstack( (arr1,arr2) )
    使用 concatenate 函數實現數組橫向組合:np.concatenate( (arr1,arr2), axis = 1) )
    使用 concatenate 函數實現數組縱向組合:np.concatenate( (arr1,arr2), axis = 0) )


2.切割數組
    使用 hsplit 函數實現數組橫向分割: np.hsplit (arr1, 2)
    使用 vsplit 函數實現數組縱向分割: np.vsplit(arr, 2)
    使用 split 函數實現數組橫向分割: np.split (arr, 2, axis=1)
    使用 split 函數實現數組縱向分割: np.split (arr, 2, axis=0)

 (1)數組轉換操作

import numpy as np

# 生成一維數組
arr = np.arange(12)  
print(arr)
# 結果: [0  1  2  3  4  5  6  7  8  9 10 11]

# 轉換爲二維數組
arr2 = arr.reshape(3,4)  # 3行4列
print(arr2)   
# 結果:
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

 

(2)二維展平爲一維

import numpy as np

arr = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
print(arr)   
# 結果:
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]


# 方法一: ravel
print('展平後的數組爲: ',arr.ravel())  # 橫向展平
# 結果: [ 0  1  2  3  4  5  6  7  8  9 10 11]

# 方法二: flatten
print('展平後的數組爲: ',arr.flatten())   # 默認爲C,表示橫向展平
# 結果: [ 0  1  2  3  4  5  6  7  8  9 10 11]

print('展平後的數組爲: ',arr.flatten('F'))   # 'F',表示縱向展平
# 結果: [ 0  4  8  1  5  9  2  6 10  3  7 11]

 

(3)數組組合方式

方法一:  橫向拼接hstack((數組a,數組b));    縱向拼接vstack((數組a,數組b))

import numpy as np

arr3 = np.arange(12).reshape(3,4)
print(arr3)
# 結果: 
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

arr4 = 4*arr3
print(arr4)
# 結果: 
# [[ 0  4  8 12]
#  [16 20 24 28]
#  [32 36 40 44]]

print('橫向拼接: ',np.hstack((arr3,arr4)))
# 結果:
# [[ 0  1  2  3  0  4  8 12]
#  [ 4  5  6  7 16 20 24 28]
#  [ 8  9 10 11 32 36 40 44]]

print('縱向拼接: ',np.vstack((arr3,arr4)))
# 結果:
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [ 0  4  8 12]
#  [16 20 24 28]
#  [32 36 40 44]]

方法二:  concatenate

axis = 1表示橫座標,橫向變化;   axis = 0表示縱座標,縱向變化

import numpy as np

arr3 = np.arange(12).reshape(3,4)
print(arr3)
# 結果: 
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

arr4 = 4*arr3
# print(arr4)
# 結果: 
# [[ 0  4  8 12]
#  [16 20 24 28]
#  [32 36 40 44]]

con = np.concatenate((arr3,arr4),axis = 1) 
print(con)
# 結果:
# [[ 0  1  2  3  0  4  8 12]
#  [ 4  5  6  7 16 20 24 28]
#  [ 8  9 10 11 32 36 40 44]]

con2 = np.concatenate((arr3,arr4),axis = 0) 
print(con2)
# 結果:
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [ 0  4  8 12]
#  [16 20 24 28]
#  [32 36 40 44]]

 

(4)數組分割方式

方法一:  橫向分割hsplit(數組,列數);    縱向分割vsplit(數組,行數)

注意:  橫向分割是列數在變化;  縱向分割是行數在變化

import numpy as np

arr5 = np.arange(16).reshape(4,4)
# print(arr5)
# 結果:
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [12 13 14 15]]

print('橫向分割: ',np.hsplit(arr5,2))
# 結果:
# [array([[ 0,  1],
#        [ 4,  5],
#        [ 8,  9],
#        [12, 13]]), array([[ 2,  3],
#        [ 6,  7],
#        [10, 11],
#        [14, 15]])]

print('縱向分割: ',np.vsplit(arr5,2))
# 結果:
# [array([[0, 1, 2, 3],
#        [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
#        [12, 13, 14, 15]])]

方法二:  橫向分割split(數組,列數,axis=1);    縱向分割split(數組,行數,axis=0);

axis = 1表示橫座標,橫向變化;   axis = 0表示縱座標,縱向變化

注意:  橫向分割是列數在變化;  縱向分割是行數在變化

import numpy as np

arr5 = np.arange(16).reshape(4,4)
# print(arr5)
# 結果:
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [12 13 14 15]]

print('橫向分割: ',np.split(arr5,2,axis=1)) 
# 結果:
# [array([[ 0,  1],
#        [ 4,  5],
#        [ 8,  9],
#        [12, 13]]), array([[ 2,  3],
#        [ 6,  7],
#        [10, 11],
#        [14, 15]])]

print('縱向分割: ',np.split(arr5,2,axis=0)) 
# 結果:
# [array([[0, 1, 2, 3],
#        [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
#        [12, 13, 14, 15]])]

 

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