Numpy支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。
使用前安裝該模塊:使用pycharm可以進入 Settings-> Project ->Project Interpreter -> 點擊右側,綠色加號
在出來的搜索框輸入Numpy -> 點擊下面的Install Package 等待提示安裝成功即可。
基本屬性:
import numpy as np
from numpy.linalg import *
lst = [[1, 3, 5], [2, 4, 6]]
print(type(lst))
np_lst = np.array(lst)
print(np_lst)
print(type(np_lst)) # 打印類型
np_lst = np.array(lst, dtype=np.float)
# bool int int8 int16 int32 int64 int128 uint8 uint16 uint32 uint64 uint128 float float16/32/64
print(np_lst.shape) # 2行 3列 打印行列式的 規格
print(np_lst.ndim) # 打印維度 2維
print(np_lst.dtype) # 打印數據類型
print(np_lst.itemsize) # 條目大小
print(np_lst.size) # 大小
其他數組:
# 2 some arrays
print(np.zeros([2, 4])) # 數值初始化一個2行4列的矩陣 全部0
print(np.ones([3, 5])) # 數值初始化一個3行5列的矩陣 全部1
print('rand')
print(np.random.rand(2, 4)) # 隨機數矩陣2行4列 0-1之間的 均勻生成
print(np.random.rand()) # 打印一個隨機數
print('randint')
print(np.random.randint(1, 10)) # 1-10之間的整數
print(np.random.randint(1, 10, 3)) # 1-10之間的3個隨機整數
print('randn')
print(np.random.randn()) # 正態分佈的隨機數
print(np.random.randn(2, 4)) # 正態分佈的隨機數 2行 4列
print('Choice')
print(np.random.choice([10, 20, 30])) # 根據可迭代 指定值之間 只會出現 10 20 30 中的一個
print('Distribute')
print(np.random.beta(1, 10, 100)) # 生成白塔分佈
操作:
# 操作
print(np.arange(1, 11)) # 生成一維數組 範圍1-10
print(np.arange(1, 11).reshape([2, 5])) # 生成一維數組 重生爲2行5列的矩陣
print(np.arange(1, 11).reshape([2, -1])) # 生成一維數組 重生爲2行5列 5可以缺省
lst = np.arange(1, 11).reshape([2, -1])
print("指數", np.exp(lst)) # 指數操作
print("平方", np.exp2(lst)) # 指數操作 2的指數冪
print("開方", np.sqrt(lst)) # 指數操作 開方
print("正弦函數", np.sin(lst)) # 三角函數
print("對數", np.log(lst)) # 對數
lst2 = np.array([[[1, 2, 3, 4], [4, 5, 6, 7]],
[[7, 8, 9, 10], [10, 11, 12, 13]],
[[14, 15, 16, 17], [18, 19, 20, 21]]
])
print(lst2.sum()) # 所有元素求和
print(lst2.sum(axis=0)) # 指定維數求和
# 對幾維求和指定 axis 越大 越深入
# [[1, 2, 3, 4], [4, 5, 6, 7]] + [[7, 8, 9, 10], [10, 11, 12, 13]]+[[14, 15, 16, 17], [18, 19, 20, 21]]
# = [[22 25 28 31] [32 35 38 41]]
print(lst2.sum(axis=1))
# 對幾維求和指定 axis 越大 越深入
# [1, 2, 3, 4] + [4, 5, 6, 7], [7, 8, 9, 10]+ [10, 11, 12, 13], [14, 15, 16, 17]+ [18, 19, 20, 21]
# = [ 5 7 9 11] [17 19 21 23] [32 34 36 38]
print(lst2.sum(axis=2))
print("max", lst2.max()) # 找出最大值
print("min", lst2.min()) # 找出最小值
數組間操作:
lst3 = np.array([10, 20, 30, 40])
lst4 = np.array([4, 3, 2, 1])
print(lst3 + lst4) # 直接進行數組的相加
print(lst3 - lst4) # 減法
print(lst3 * lst4) # 乘法
print(lst3 / lst4) # 除法
print(lst3 ** 2) # 平法
矩陣操作:
print("兩矩陣點乘", np.dot(lst3.reshape([2, 2]), lst4.reshape([2, 2]))) # 變成矩陣進行 點乘
print("追加", np.concatenate((lst3, lst4), axis=0)) # 追加 首尾追加
print("上下拼接", np.vstack((lst3, lst4))) # 矩陣上下拼接
print("左右拼接", np.hstack((lst3, lst4))) # 矩陣左右拼接
print("拆分矩陣", np.split(lst3, 2)) # 分開 分成兩個矩陣
矩陣運算操作:
print("3*3單位矩陣", np.eye(3)) # 3*3單位矩陣
lst5 = np.array([[1, 2],
[3, 4]])
print("逆", inv(lst5)) # 求矩陣的逆
print("轉置", lst5.transpose()) # 轉置矩陣
print("行列式", det(lst5)) # 求行列式
print("特徵值 特徵向量", eig(lst5)) # 特徵向量 打印出兩個array 第一個是特徵值 第二個是特徵向量
lst6 = np.array([[5], [7]]) #
# [1] [2] [5]
# [3]x + [4]y = [7] x=-3,y=4
print("解方程組", solve(lst5, lst6)) # 求解線性方程組
其他:
# 其他
print("信號處理", np.fft.fft(np.array([1, 1, 1, 1, 1, 1, 1, 1]))) # 信號處理
print("係數運算", np.corrcoef([1, 0, 1], [0, 2, 1])) # 相關係數的運算
print("生成一元多次函數", np.poly1d([2, 1, 3])) # 生成一元多次函數 x^2+x+3 = 從0次冪升高
總結:
- np.array(lst) 轉變爲該模塊數組
- np_lst 的shape(規格)、ndim(維度)、dtype(數據類型)、itemsize(條目大小)、size(大小)
- np.zeros() 創建全0矩陣,np.ones()創建全1矩陣 括號內指定規格 例如:[2,4] 2行4列
- np.random.rand()創建隨機數或隨機矩陣,0-1之間的數。例如:np.random.rand(2,4) 2行4列 、np.random.rand() 一個隨機數
- np.random.randint() 創建隨機數或隨機矩陣。例如:np.random.randint(1,10) 產生一個1-10之間的隨機整數、np.random.randint(1,10,4)產生3個1-10之間的隨機整數
- np.random.randn()創建正態分佈隨機數或矩陣。例如:np.random.randn() 產生1個隨機數、np.random.randn(2,4)創建正態分佈矩陣2行4列
- np.random.choice(array) 從array中隨機選擇一個數。array是一個可迭代對象
- np.random.beta()創建一個貝塔分佈矩陣。例如:np.random.beta(1,10,100) 產生100個1-10之間的符合貝塔分佈的隨機數
- np.arange() 遍歷創建一維數組。例如:np.arange(1-11)遍歷創建一個1維數組,範圍1-10之間的數。
- np.arange(a,b).reshape()將創建的一維數組,進行重塑。例如:np.arange(1,11).reshape([2,5])將一維數組,重新生成一個2行5列的數組
- np.exp() 是返回e的n次方,e爲2.71828。
- np.exp2() 是返回2的n次方。
- np.sqrt() 是返回開方。
- np.sin() 是返回正弦函數
- np.log() 是返回對數
- lst.sum() 數組元素求和
- lst.sum(axis=n) 對於多維數組求和,n越大表示維度越大,越深入