1. 程式人生 > >Python常用庫之numpy(二)

Python常用庫之numpy(二)

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 資料分析實戰》