Numpy的簡單使用

Numpy支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。

官方:http://www.numpy.org/


使用前安裝該模塊:使用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越大表示維度越大,越深入

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章