Python常用庫之numpy(二)
阿新 • • 發佈:2018-12-14
6. 高階操作
① 連線陣列
# 4.1 垂直和水平入棧 arr1 = np.ones((2,2)) arr2 = np.zeros((2,2)) arr1_v = np.vstack((arr1,arr2)) # 垂直入棧 print(arr1_v) arr1_h = np.hstack((arr1,arr2)) # 水平入棧 print(arr1_h) ''' [[ 1. 1.] [ 1. 1.] [ 0. 0.] [ 0. 0.]] [[ 1. 1. 0. 0.] [ 1. 1. 0. 0.]] ''' # 4.2 將一維陣列以行或列的方式壓入棧中,形成二維結構 a = np.array([1,2,3]) b = np.array([4,5,6]) c_column = np.column_stack((a,b)) # 作為列拼接 print(c_column) c_row = np.row_stack((a,b)) # 作為行拼接 print(c_row) ''' [[1 4] [2 5] [3 6]] [[1 2 3] [4 5 6]] '''
② 陣列切分
arr1 = np.arange(16).reshape((4,4)) print(arr1) arr1_h1,arr1_h2 = np.hsplit(arr1,2) # 按列切分 print(arr1_h1,'\n',arr1_h2) arr1_v1,arr1_v2= np.vsplit(arr1,2) # 按行切分 print(arr1_v1,'\n',arr1_v2) ''' [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] 按列切分 [[ 0 1] [ 4 5] [ 8 9] [12 13]] [[ 2 3] [ 6 7] [10 11] [14 15]] 按行切分 [[0 1 2 3] [4 5 6 7]] [[ 8 9 10 11] [12 13 14 15]] ''' # 切分為3部分,中間部分為[1,3],即第二列和第三列,axis=1,按列切分 arr1_1,arr1_2,arr1_3= np.split(arr1,[1,3],axis=1) print(arr1_1,'\n',arr1_2,'\n',arr1_3) ''' 切分為3部分,分別為0,1-2列,3列 [[ 0] [ 4] [ 8] [12]] [[ 1 2] [ 5 6] [ 9 10] [13 14]] [[ 3] [ 7] [11] [15]] '''
7. 物件的副本(檢視)
# 5.1 不使用副本的情況下,修改原始資料所有資料都發生變化 arr1 = np.arange(4) arr2 = arr1 print("原始的arr1:",arr1) arr1[-1] = 5 # 修改陣列最後一位 print("修改之後的arr1:",arr1) print("此時的arr2:",arr2) ''' 原始的arr1: [0 1 2 3] 修改之後的arr1: [0 1 2 5] 此時的arr2: [0 1 2 5] ''' # 5.2 使用副本 arr3 = arr1.copy() print("arr1的副本資料arr3:",arr3) arr1[-1] = 0 print("修改arr1的值:",arr1) print("此時arr3的值",arr3) ''' arr1的副本資料arr3: [0 1 2 5] 修改arr1的值: [0 1 2 0] 此時arr3的值 [0 1 2 5] '''
8. 向量化
# 方便實現矩陣間的運算,避免了迴圈
arr1 = np.arange(4).reshape((2,2))
arr2 = np.arange(4).reshape((2,2))
mul = arr1*arr2
print(mul)
'''
[[0 1]
[4 9]]
'''
9. 廣播機制
# 廣播機制
arr1 = np.arange(8).reshape((2,4))
arr2 = np.arange(4)
arr_add = arr1+arr2
print("arr1:",arr1)
print("arr2:",arr2)
print("add:",arr_add)
'''
arr1: [[0 1 2 3]
[4 5 6 7]]
arr2: [0 1 2 3]
add: [[ 0 2 4 6]
[ 4 6 8 10]]
'''
10. 檔案操作
a.資料讀取
函式使用:從txt檔案中讀取資料,必須保證資料為同一資料型別
基本形式:
引數說明:
fname:檔案或其路徑;
dtype結果資料型別;
comments:註釋符號
delimiter:分隔符
converters:通過字典對映資料
skiprows:跳過的行號
usecols:需要獲取的列號
unpack:是否壓縮(若為TRUE,則對應列會分別顯示,欄位資料被拆分,不是一個整體)
ndmin:返回陣列的最小維度
encoding:編碼格式
b. 資料寫入
函式說明:儲存陣列資料到txt檔案
形式:
X:一維或二維陣列 fmt:定義輸出格式
newline:劃分行標記
header:寫在檔案開始
footer:寫在檔案結束
# 其他引數同np.loadtxt()函式
特殊說明:np.loadtxt(),np.savetxt()函式除了使用txt檔案,還可以實現對csv檔案的操作;
data = np.loadtxt('data/data1.csv',delimiter=',')
print(data)
np.savetxt('data/data2.csv',data,delimiter=',',fmt='%1.2f')
'''
data1.csv
1,23
2,20
3,15
data2.csv
1.00,23.00
2.00,20.00
3.00,15.00
'''
參考:
3.《Python 資料分析實戰》