1. 程式人生 > >python3 numpy詳解

python3 numpy詳解

基礎操作

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
#將缺失的值替換為中值或者平均值