python3 numpy詳解
阿新 • • 發佈:2018-12-24
基礎操作
import numpy as np # np建立陣列 a = np.array([1,2,3]) print(a) print(type(a)) a2 = np.array(range(10)) print(a2) print(type(a2)) # numpy特有的方法 生成一個數組型別 與array(range())一致 a3 = np.arange(0,12,2) print(a3) print(type(a3)) # dtype是當前數組裡邊存放的數字的型別 print(a3.dtype) # 手動指定數值型別 a4 = np.array(range(1,4),dtype="float32") a4 = np.array([1,0,1,1,5],dtype=bool) print(a4) print(a4.dtype) # 調整數字型別 a5 = a4.astype("int32") print(a5.dtype)
讀取檔案(csv)
import numpy as np us_file_path = "./data/US_video_data_numbers.csv" uk_file_path = "./data/GB_video_data_numbers.csv" # 預設情況下np.loadtxt 不會對csv檔案進行按照 , 分割 #需要指定分隔符 delimiter="," # 預設使用科學計數法 dtype 指定加載出來的資料型別 # 預設情況下unpack為false 指定為True之後行列互換 即矩陣轉置矩陣 t1 = np.loadtxt(us_file_path,delimiter=",",dtype=int,unpack=True) print(t1)
- 矩陣轉置方法
# reshape中傳入的引數在官方文件中傳入的是元組 所以建議傳入元組
t2 = np.arange(24).reshape((4,6))
print(t2)
# 轉置方法1
print(t2.transpose())
# 轉置方法2 T是一個屬性
print(t2.T)
# 轉置方法3 轉換1軸 和 0 軸
# 注意 軸0 1 2 ... 分別是在定義矩陣時的引數shape(3,2,5,...)
print(t2.swapaxes(1,0))
- 取值賦值索引
import numpy as np us_file_path = "./data/US_video_data_numbers.csv" uk_file_path = "./data/GB_video_data_numbers.csv" # 預設情況下np.loadtxt 不會對csv檔案進行按照 , 分割 #需要指定分隔符 delimiter="," # 預設使用科學計數法 dtype 指定加載出來的資料型別 # 預設情況下unpack為false 指定為True之後行列互換 即矩陣轉置矩陣 t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int") # 取資料的行 print(t1[2]) # 取連續多行資料 print("\n") print(t1[2:5]) # 取不連續多行 注意有兩個方括號 print("\n") print(t1[[2,8,56]]) # 取列 print("\n") print(t1[1,:])#每一列都要 print(t1[:,0]) # 取連續多列 print("\n") print(t1[:,2:]) # 取不連續多列 print("\n") print(t1[:,[2,3,3]]) # 取多行多列 print("\n") print(t1[2,3]) print("\n") # 取第3行到第五行 第二列 到 第四列 print(t1[2:5,1:4]) # 取多個不相鄰的點 print("\n") # print(t1[[0,3],[0,1,2]]) # 更多索引方法 a = np.arange(24).reshape(4,6) a[a>10] = 0 print(a) #numpy中的三元運算子 # 把小於10的賦值100 否則賦值300 np.where(a<=10,100,300) # 剪枝 # 把小於10的換為10 大於14的換成14 (等於無所謂) print(a.clip(10,14)) # 強行賦值nan # nan是浮點型別 所以需要把interger強行轉化為float a2 = a.astype(float) a2[3,3] = np.nan print(a2)
- 陣列的拼接
import numpy as np
# 拼接兩組資料並且在最後一行記錄國家資訊
us_file_path = "./data/US_video_data_numbers.csv"
uk_file_path = "./data/GB_video_data_numbers.csv"
# 預設情況下np.loadtxt 不會對csv檔案進行按照 , 分割
#需要指定分隔符 delimiter=","
# 預設使用科學計數法 dtype 指定加載出來的資料型別
# 預設情況下unpack為false 指定為True之後行列互換 即矩陣轉置矩陣
t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
t2 = np.loadtxt(uk_file_path,delimiter=",",dtype="int")
# 構造全為 0 的資料
zeros_data = np.zeros((t1.shape[0],1)).astype(int)
ones_data = np.ones((t2.shape[0],1)).astype(int)
# 分別新增一列資料 在最後邊 水平拼接 使得資料更多行
us_data = np.hstack((t1,zeros_data))
uk_data = np.hstack((t2,ones_data))
# 拼接us uk 豎直拼接 使得資料更多行
final_data = np.vstack((us_data,uk_data))
print(final_data)
numpy 中的其他好使的方法
import numpy as np
# 生成只有對角線是 1 的矩陣
t1 = np.eye(10)
t1[3,4] = 9
print(t1)
# 求每一列的最大值
max = np.argmax(t1,axis=0)
print(max)
# 生成隨機數
# 如果不使用種子 每次得到的數字都是不一樣的 而使用了種子
# 每次得到的隨機結果都是一樣的
np.random.seed(10)
t = np.random.randint(0,20,(3,4))
print(t)
- NAN說明
import numpy as np
# 兩個nan不相等
print(np.nan == np.nan)
# 判斷陣列中nan的數量
t2 = np.arange(20).reshape((4,5)).astype(float)
print(np.count_nonzero(t2))
t2[3,3] = np.nan
print('\n')
print(np.count_nonzero(t2!=t2))
#nan和任何值計算都是nan
# 要注意在要計算之前一般應該判斷矩陣中是否含有nan
#將缺失的值替換為中值或者平均值