【Python】機(jī)器學(xué)習(xí)矩陣運(yùn)算必學(xué)庫Numpy首秀!
公眾號:尤而小屋
作者:Peter
編輯:Peter
大家好,我是Peter~
開始更新numpy相關(guān)的文章,本文介紹numpy中的25個小案例,主要內(nèi)容是如何利用numpy來生成向量(一維數(shù)組),矩陣和高維數(shù)組等

numpy介紹
NumPy(Numerical Python) 是 Python 語言的一個擴(kuò)展程序庫,支持大量的維度數(shù)組與矩陣運(yùn)算,此外也針對數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫。
NumPy 是一個運(yùn)行速度非??斓臄?shù)學(xué)庫,主要用于數(shù)組計(jì)算,包含:
一個強(qiáng)大的N維數(shù)組對象 ndarray 廣播功能函數(shù) 整合 C/C++/Fortran 代碼的工具 線性代數(shù)、傅里葉變換、隨機(jī)數(shù)生成等功能
導(dǎo)入numpy
import?numpy?as?np
打印numpy的版本和配置信息
print(np.version)
print(np.show_config)
查看函數(shù)幫助文檔
#?np.info(np.abs)
創(chuàng)建0向量
np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros((5,2))
array([[0., 0.],
[0., 0.],
[0., 0.],
[0., 0.],
[0., 0.]])
np.zeros((2,2,3))
array([[[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.]]])
改變0向量指定位置的值
z?=?np.zeros((3,4))
z
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
z[2,3]?=?1
z[1,1]?=?2
z
array([[0., 0., 0., 0.],
[0., 2., 0., 0.],
[0., 0., 0., 1.]])
找到非0的值
np.nonzero(z)
(array([1, 2]), array([1, 3]))
創(chuàng)建全1向量、數(shù)組
np.ones(6)
array([1., 1., 1., 1., 1., 1.])
np.ones((3,2))
array([[1., 1.],
[1., 1.],
[1., 1.]])
np.ones([2,3,2])
array([[[1., 1.],
[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.],
[1., 1.]]])
創(chuàng)建單位矩陣-eye
np.eye(4)
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
np.eye(4,dtype=int)
array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]])
自定義數(shù)據(jù)類型
np.ones([2,3])??#?默認(rèn)是浮點(diǎn)數(shù)
array([[1., 1., 1.],
[1., 1., 1.]])
np.ones([2,3],dtype=int)??#?指定為int類型
array([[1, 1, 1],
[1, 1, 1]])
列表轉(zhuǎn)數(shù)組
lst?=?[1,2,3,4]
np.array(lst)
array([1, 2, 3, 4])
#?指定數(shù)組類型
lst?=?[1,2,3,4]
np.array(lst,?dtype=float)
array([1., 2., 3., 4.])
嵌套列表轉(zhuǎn)數(shù)組
lst1?=?[[1,2,3],[4,5,6]]
np.array(lst1)
array([[1, 2, 3],
[4, 5, 6]])
#?指定數(shù)據(jù)類型
lst1?=?[[1,2,3],[4,5,6]]
np.array(lst1,?dtype=float)
array([[1., 2., 3.],
[4., 5., 6.]])
元組轉(zhuǎn)數(shù)組
t1?=?(9,8,7)
np.array(t1)
array([9, 8, 7])
嵌套元組轉(zhuǎn)數(shù)組
t2?=?((9,8,7),(6,5,4))
np.array(t2)
array([[9, 8, 7],
[6, 5, 4]])
列表和元組混合
lt?=?[(1,2,3),(7,8,9)]
np.array(lt)
array([[1, 2, 3],
[7, 8, 9]])
迭代器轉(zhuǎn)數(shù)組
range_number?=?range(3,8)
np.array(range_number)
array([3, 4, 5, 6, 7])
#?指定類型
range_number?=?range(3,?8)
np.array(range_number,?dtype=float)
array([3., 4., 5., 6., 7.])
特殊矩陣1
邊界值為1,其他為0
b?=?np.ones([6,6])
b
array([[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]])
b[1:-1,1:-1]?=?0
b
array([[1., 1., 1., 1., 1., 1.],
[1., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0., 1.],
[1., 1., 1., 1., 1., 1.]])
特殊矩陣2
用0填充矩陣的邊界
c?=?np.ones((6,6))
c
array([[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1.]])
np.pad(c,pad_width=1,mode="constant",constant_values=0)
array([[0., 0., 0., 0., 0., 0., 0., 0.],
[0., 1., 1., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 1., 1., 0.],
[0., 0., 0., 0., 0., 0., 0., 0.]])
特殊矩陣3
6*6的矩陣,對角線下方的值為1,2,3,4,5
np.diag(1?+?np.arange(5),?k=-1)
array([[0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0],
[0, 2, 0, 0, 0, 0],
[0, 0, 3, 0, 0, 0],
[0, 0, 0, 4, 0, 0],
[0, 0, 0, 0, 5, 0]])
np.arange函數(shù)
numpy 包中的使用 arange 函數(shù)創(chuàng)建數(shù)值范圍并返回 ndarray 對象,函數(shù)使用方法為:
numpy.arange(start,?stop,?step,?dtype)
start:起始值,默認(rèn)為0 stop:終止值,不包含 step:步長,默認(rèn)為1 dtype:返回?cái)?shù)組的數(shù)據(jù)類型
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#?指定步長
np.arange(0,10,2)
array([0, 2, 4, 6, 8])
#?指定類型
np.arange(0,10,2,dtype=float)
array([0., 2., 4., 6., 8.])
創(chuàng)建隨機(jī)數(shù)組
np.random.random((2,3,2))
array([[[0.56045087, 0.15566786],
[0.34963774, 0.51837142],
[0.68895046, 0.04980068]],
[[0.98352437, 0.47189043],
[0.30430488, 0.49057744],
[0.20020709, 0.90466043]]])
Pandas數(shù)據(jù)轉(zhuǎn)數(shù)組
import?pandas?as?pd
s?=?pd.Series([1,2,3,4])
np.array(s)
array([1, 2, 3, 4])
d?=?pd.DataFrame([[1,2,3,4],[9,8,7,6]])
np.array(d)
array([[1, 2, 3, 4],
[9, 8, 7, 6]])
反轉(zhuǎn)數(shù)組
ten?=?np.arange(10)
ten
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
ten[::-1]
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
reshape函數(shù)
主要是用來改變數(shù)組的形狀
arr?=?np.arange(16)
arr
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
arr.shape
(16,)
arr.reshape((4,4))
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
arr.reshape((2,8))
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15]])
arr.reshape((8,2))
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15]])
arr.reshape((1,16))
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]])
我們需要特別注意-1的使用,numpy會自動生成相應(yīng)的shape值
arr.reshape((8,-1))
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15]])
arr.reshape((-1,8))
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15]])
np.linspace函數(shù)
用于構(gòu)建一個等差數(shù)列的數(shù)組,使用方法為:
np.linspace(
????start,??#?起始值
????stop,??#?終止值,如果endpoint為true,該值包含于數(shù)列中
????num=50,??#?生成的樣本量,默認(rèn)為50
????endpoint=True,??#是否包含末尾的值;默認(rèn)為True
????retstep=False,??#??為True時,生成的數(shù)組中會顯示間距,反之不
????dtype=None??#?數(shù)據(jù)類型
)
np.linspace(1,10,5)
array([ 1. , 3.25, 5.5 , 7.75, 10. ])
可以不包含末尾的數(shù)值:
np.linspace(1,10,5,endpoint=False)
array([1. , 2.8, 4.6, 6.4, 8.2])
全部是1的等差數(shù)列:
#?全部是1的等差數(shù)列
np.linspace(1,1,10)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
加上restep參數(shù),則會顯示步長:
np.linspace(1,10,5,retstep=True)
(array([ 1. , 3.25, 5.5 , 7.75, 10. ]), 2.25)
np.logspace函數(shù)
主要是用于生成等比數(shù)列,使用方法為:
np.logspace(
????start,?#?base?**?start(指數(shù))
????stop,?# base ** stop;如果endpoint為true,該值包含于數(shù)列中
????num=50,?
????endpoint=True,?
????base=10.0,??#?默認(rèn)底數(shù)為10
????dtype=None
)
np.logspace(1,5,num=10)
array([1.00000000e+01, 2.78255940e+01, 7.74263683e+01, 2.15443469e+02,
5.99484250e+02, 1.66810054e+03, 4.64158883e+03, 1.29154967e+04,
3.59381366e+04, 1.00000000e+05])
指定不同的底數(shù);第一個數(shù)為2的0次方,為1:
np.logspace(0,8,num=10,base=2)
array([ 1. , 1.85174942, 3.42897593, 6.34960421,
11.75787594, 21.77264 , 40.3174736 , 74.65785853,
138.24764658, 256. ])
往期精彩回顧
評論
圖片
表情
