前言
numpy是python的科學計算模塊,底層實現用c代碼,運算效率很高。numpy的核心是矩陣narray運算。
narray介紹
- 矩陣擁有的屬性
ndim屬性:維度個數
shape屬性:維度大小
dtype屬性:數據類型
常用矩陣創建方法
import numpy as np
# 由列表轉化
np.array([[1,2],[3,4]])
# 創建多維隨機浮點數矩陣,區間0.0 ~ 1.0
arr = np.random.rand(3, 4)
# 創建多維整數矩陣,指定隨機區間
arr = np.random.randint(-1, 5, size = (3, 4))
# 創建多維隨機浮點數矩陣,指定區間
np.random.uniform(-1, 5, size = (3, 4))
# 創建全是0的矩陣
np.zeros((3,4))
# 仿照一個矩陣的形狀和類型創建0矩陣
np.zeros_like([3,4])
# 創建1的矩陣
np.ones((3,4))
#仿照一個矩陣的形狀和類型創建1矩陣
np.ones_like((3,4))
# 創建隨機值
np.empty((3,4))
# 對原來矩陣打亂順序
np.random.shuffle(arr)
常用基礎運算方法
如果python代碼中有很多涉及數學運算的操作,使用numpy是一種很好的提高運算效率的方法。
import numpy as np
np.sum() # 計算矩陣元素的和
np.mean() # 計算平均值
np.e # 自然數e
np.pi # 自然數π
np.abs() # 計算絕對值,可以是數組
np.std(li) # 計算標准差
np.var() # 計算方差
np.max() # 計算最大值
np.min() # 計算最小值
np.cov(a,b) # 計算協方差,得到矩陣,去[0,1]或[1,0]位置的為協方差
np.alen(a) # 計算矩陣的長度,多維矩陣計算第一列的長度,即列數
np.argmax() # 返回最大索引下標值
np.argmin() # 返回最小索引下標值
np.ceil(): # 向上最接近的整數,參數是 number 或 array
np.floor(): # 向下最接近的整數,參數是 number 或 array
np.rint(): # 四舍五入,參數是 number 或 array
np.isnan(): # 判斷元素是否為 NaN(Not a Number),參數是 number 或 array,返回布爾矩陣
np.multiply(arr1, arr2): # 對應元素相乘,參數是 number 或 array
np.divide(arr1, arr2): # 元素相除,參數是 number 或 array
np.where(condition, x, y): # 三元運算符,x if condition else y
np.any(): # 至少有一個元素滿足指定條件,返回True
np.all() # 所有的元素滿足指定條件,返回True
np.unique() # 去除重復值並返回上升的排序結果
v = np.who({'aaa':arr1}) # 打印arr的相關屬性
矢量的加減乘
arr1 = np.random.randint(0,10,size=(3,4))
print(arr1*arr1) # 相對應元素相乘
print(arr1+arr1) # 對應元素相加
print(arr1-arr1) # 對應元素相減
布爾判斷
arr1 = np.random.randint(0,10,size=(2,3))
print(arr1 < 5)
[[False False False]
[False True False]]
矩陣轉換
# 多維使用數字表示維數,0,1,2,3代表四維
arr = np.random.rand(2,3) # 2x3 數組
print(arr.transpose()) # 轉換為 3x2 數組,默認規則行列交換
arr.transpose((3,2,1,0)) # 行和列交換
arr1 = arr.T # 行列交換
# 從原來矩陣按規則產生新矩陣
np.take()
>>> a = [4, 3, 5, 7, 6, 8]
>>> indices = [0, 1, 4]
>>> np.take(a, indices)
array([4, 3, 6])
>>> np.take(a, [[0, 1], [2, 3]])
array([[4, 3],
[5, 7]])
# 在不改變數據的情況下改變矩陣形狀
np.reshape()
>>> np.reshape(a, (2, 3))
array([[0, 1, 2],
[3, 4, 5]])
# 數據復制
np.repeat()
>>> np.repeat(3, 4)
array([3, 3, 3, 3])
讀取數據文件
從txt文件中加載矩陣數據。
data_array = np.loadtxt(filename, # 文件名
delimiter=',', # 分隔符
dtype=int, # 數據類型,指的是生成的矩陣的數據類型
usecols=(0,1)) # 指定讀取的列號