寫在最前的話
Numpy是數(shù)據(jù)科學計算的基礎(chǔ)模塊,用于數(shù)值計算。
Numpy基于數(shù)組計算,比Python自帶的數(shù)據(jù)結(jié)構(gòu)如列表等要速度快很多,如[3,4,5]+1>>[4,5,6],這是列表做不到的。
Numpy擁有很多高級函數(shù),可以對數(shù)組、列表等數(shù)據(jù)結(jié)構(gòu)進行高效的處理。
導入數(shù)據(jù)庫:import numpy as np
1、Numpy基礎(chǔ)知識
1.1、數(shù)組創(chuàng)建
| 函數(shù) | 用法 | 舉例 |
|---|---|---|
| np.array() | 自定義創(chuàng)建數(shù)組 | np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]],dtype='int') |
| np.arange(n1,n2,step) | 創(chuàng)建給定區(qū)間內(nèi)步長相等的一維數(shù)組 | np.arange(1,10,0.5) |
| np.linspace(n1,n2, num,endpoint=true) | 創(chuàng)建給定區(qū)間和元素數(shù)量的等差一維數(shù)組 | np.linspace(0,10,11) |
| np.logspace(n1,n2, num,endpoint=true,base=10) | 創(chuàng)建以對數(shù)刻度均勻間隔的一維數(shù)組 | np.logspace(0,10,11,base=2) |
| np.zeros(shape,dtype) | 創(chuàng)建給定形狀和類型的全0數(shù)組,類似的還有np.ones、np.full | np.zeros([2,3],dtype='int') |
| np.zeros_like(a,dtype) | 創(chuàng)建與a形狀相同的全0數(shù)組,類似的還有np.ones_like、np.full_like | a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]],dtype='int')>>np.zeros_like(a,dtype='int') |
| np.eye(num) | 創(chuàng)建給定列數(shù)的二維單位對角矩陣,對角線上是1,其他地方是0。 | np.eye(6) |
| np.diag(a) | 創(chuàng)建a的二維對角矩陣,對角線上是a的元素,其他地方是0。 | np.diag([2,3,4]) |
1.2、數(shù)組屬性
| 屬性 | 用法 | 舉例 |
|---|---|---|
| ndarray.ndim | 查看數(shù)組的維度數(shù) | np.array([[1,2,3],[4,5,6]]).ndim |
| ndarray.shape | 查看數(shù)組的形狀 | np.array([[1,2,3],[4,5,6]]).shape |
| ndarray.size | 查看數(shù)組的元素數(shù)量 | np.array([[1,2,3],[4,5,6]]).size |
| ndarray.dtype | 查看數(shù)組的數(shù)據(jù)類型 | np.array([[1,2,3],[4,5,6]]).dtype |
| ndarray.itemsize | 查看數(shù)組每個元素的字節(jié)大小 | np.array([[1,2,3],[4,5,6]]).itemsize |
注:<u>“=”和“.copy”的區(qū)別</u>
| 拷貝方式 | 說明 | 舉例 |
|---|---|---|
| dnarray2=dnarray1 | 淺拷貝,視圖上修改,原數(shù)據(jù)也會根據(jù)改變 | dnarray1=np.array([1,2,4])>>dnarray2=dnarray1 >>dnarray2[0]=3>>dnarray1 |
| dnarray2=dnarray1.copy() | 深拷貝,新數(shù)組修改,原數(shù)據(jù)不會改變 | dnarray1=np.array([1,2,4])>>dnarray2=dnarray1.copy()>>dnarray2[0]=3>>dnarray1 |
1.3、索引和切片
1.3.1、連續(xù)索引
1.3.1.1、一維數(shù)組索引和切片
- 一維數(shù)組索引和列表類似,但處理速度更快
| 索引方式 | 用法 | 舉例 |
|---|---|---|
| ndarray[index] | 索引指定元素 | np.array([1,2,4])[0] |
| ndarray[index1:index2] | 索引指定區(qū)間,左閉右開 | np.array([1,2,4])[0:2] |
| ndarray[index1:index2:step] | 索引指定間距的區(qū)間,左閉右開 | np.array([1,2,4,5,7,8,9,3,10])[0:5:2] |
| 修改方式 | 用法 | 舉例 |
|---|---|---|
| ndarray[index] = | 修改指定元素 | d=np.array([1,2,4])>>d[0]=3>>d |
| ndarray[index1:index2]=[n1,n2...] | 修改指定區(qū)間 | d=np.array([1,2,4])>>d[0:2]=[1,3]>>d |
| ndarray[index1:index2:step]=[n1,n2...] | 修改指定間距的區(qū)間 | d=np.array([1,2,4,5,7,8,9,3,10])>>d[0:5:2]=[2,3,6]>>d |
1.3.1.2、多維數(shù)組索引和切片
| 索引方式 | 用法 | 舉例 |
|---|---|---|
| ndarray[axis] | 索引指定行數(shù) | d=np.arange(0,10,0.5).reshape(4,5)>>d[0] |
| ndarray[axis1,axis2,...] | 索引指定元素,等同于ndarray[axis1][axis2][...] | d=np.arange(0,10,0.5).reshape(4,5)>>d[0,0] |
| ndarray[ : , : , : :step] | 索引指定區(qū)間 | d=np.arange(0,10,0.5).reshape(4,5)>>d[:,2:4] |
| ndarray[criteria] | 對數(shù)組進行條件索引,輸出一維數(shù)組結(jié)果 | d=np.arange(0,10,0.5).reshape(4,5)>>d[(d>=3.5) & (d<=7)] |
1.3.2、花式索引
| 花式大法 | 說明 | 舉例 |
|---|---|---|
| dnarray[[ , ,...]] | 索引并排列第一維的指定行數(shù) | d=np.arange(0,10,0.5).reshape(4,5)>>d[[1,3]] |
| dnarray[[ , ],[ , ],...] | 索引并排列指定維的指定行數(shù)或元素 | d=np.arange(0,10,0.5).reshape(4,5)>>d[[1,3],[0,4]] |
| dnarray[np.ix_([ , ],[ , ],...)] | np.ix_表示交叉的元素數(shù)組 | d=np.arange(0,10,0.5).reshape(4,5)>>d[np.ix_([1,3],[0,4])]#等同于d[[1,3]][:,[0,4]] |
2、Numpy高級用法
2.1、數(shù)組形狀改變
2.1.1、普通形狀改變
| 函數(shù) | 用法 | 舉例 |
|---|---|---|
| ndarray.reshape( , ,...) | 展示數(shù)組形狀的改變,只返回視圖,不改變原數(shù)組 | d=np.arange(0,10,0.5).reshape(4,5)>>d2=d.reshape(2,10)>>d2 |
| ndarray.resize( , ,...) | 改變數(shù)組的形狀 | d=np.arange(0,10,0.5).reshape(4,5)>>d.resize(2,10)>>d |
| ndarray.shape=( , ,...) | 改變數(shù)組的形狀 | d=np.arange(0,10,0.5).reshape(4,5)>>d.shape=(2,10)>>d |
| ndarray.ravel(order='c') /ndarray.reshape(-1) | 將ndarray數(shù)組展平為一維數(shù)組,order='c'(默認)則橫向展平,order='F'則豎向展平,在函數(shù)基礎(chǔ)上改變元素,原數(shù)組視圖和結(jié)果均發(fā)生改變。 | d=np.arange(0,10,0.5).reshape(4,5)>>d.ravel() |
| ndarray.flatten(order='c') | 和ndarray.ravel類似,不過僅為過程視圖,在函數(shù)基礎(chǔ)上改變元素,原數(shù)組結(jié)果不改變。 | d=np.arange(0,10,0.5).reshape(4,5)>>d.flatten() |
<u>注:n維數(shù)組形狀進行變化,若n-1維都已知,那么Python會自動指定未知維度。如:d.shape=(2,2,5)等同于d.shape=(2,2,-1)。</u>
2.1.2、花式形狀改變
| 函數(shù) | 用法 | 舉例 |
|---|---|---|
| dnarray[ : ,np.newaxis] | 一維數(shù)組變二維數(shù)組 | d2=np.arange(10)>>d2[np.newaxis,:].shape |
| np.hstack(( , ,...)) | 按水平方向合并,列數(shù)必須相同 | d1=np.array([1,2,3])>>d2=np.array([3,4,6])>>np.hstack((d1,d2)) |
| np.vstack(( , ,...)) | 按垂直方向合并,行數(shù)必須相同 | d1=np.array([1,2,3])>>d2=np.array([3,4,6])>>np.vstack((d1,d2)) |
| np.concatenate(( , ,...),axis= ) | 按指定軸合并,axis=0(默認)沿垂直方向合并,axis=1沿水平方向合并。 | d1=np.array([[1,2,3]])>>d2=np.array([[3,4,6,4]])>>np.concatenate((d1,d2),axis=1) |
| np.tile(dnarray,( , ,...)) | 通過重復dnarray數(shù)組的對應軸創(chuàng)建新的數(shù)組 | d1=np.array([[1,2],[3,4]])>>np.tile(d1,(2,3)) |
2.2、ufunc廣播機制
- ufunc通用函數(shù),指能夠?qū)rray中所有元素進行操作的函數(shù)。
- Broadcasting指對不同形狀的array之間進行算術(shù)運算的方式。
- 不同形狀的數(shù)組運算時,Numpy則會執(zhí)行廣播機制。
2.2.1、廣播運算機制
[圖片上傳失敗...(image-3fd2f3-1582267160478)]
- 一維數(shù)組:廣播運算時,按照行補齊方式,當行數(shù)不一致時,首先補齊行數(shù),再進行運算。
- 二維數(shù)組:列或行數(shù)一致時可進行廣播運算,列數(shù)不一致則補齊列數(shù)進行運算;行數(shù)不一致則補齊行數(shù)運算。
- 多維數(shù)組:情況更復雜,以有基準能補齊為原則進行廣播運算。
2.2.2、通用函數(shù)
2.2.2.1、一元函數(shù)
- 一元函數(shù)指僅接受一個數(shù)組參數(shù),對數(shù)組的全部元素進行運算。
| 函數(shù) | 用法 | 舉例 | 算術(shù)符運算 |
|---|---|---|---|
| np.abs()/np.fabs() | 計算每個元素的絕對值,abs適用全部數(shù)據(jù)類型,fabs無法適用復數(shù) | d1=np.array([-1,2,-3])>>np.abs(d1) | -- |
| np.sqrt() | 計算每個元素的平方根 | d1=np.array([9,4,16])>>np.sqrt(d1) | d1=np.array([9,4,16])>>d1**0.5 |
| np.square() | 計算每個元素的平方 | d1=np.array([3,2,4])>>np.square(d1) | d1=np.array([3,2,4])>>**2 |
| np.exp() | 計算每個元素以自然常數(shù)e為底的指數(shù)函數(shù) | d1=np.array([3,2,4])>>np.exp(d1) | -- |
| np.log()/np.log10()/np.log2() | 計算每個元素以e為底(默認)、10為底、2為底的對數(shù) | d1=np.array([100,1000,10])>>np.log10(d1) | -- |
| np.sign() | 計算每個元素的符號:1(正),0(0),-1(負) | d1=np.array([-3,0,3])>>np.sign(d1) | -- |
| np.ceil() /np.floor()/np.round() | 向上取整、向下取整、四舍五入 | d1=np.array([-3.5,0.7,3.3])>>np.ceil(d1) | -- |
| np.isnan() | 返回一個布爾數(shù)組,指示每個元素是否是NaN(不是數(shù)字) | d1=np.array([-3.5,0.7,np.nan])>>np.isnan(d1) | -- |
<u>注:在判斷函數(shù)后加上.any()/.all()會輸出一個做整體判斷的布爾型數(shù)據(jù)。如np.isnan([-3.5,0.7,np.nan]).all()會輸出False,np.isnan([-3.5,0.7,np.nan]).all()會輸出True。</u>
2.2.2.2、二元函數(shù)
- 二元函數(shù)指僅接受兩個數(shù)組參數(shù),對數(shù)組的全部元素進行運算。
| 函數(shù) | 用法 | 舉例 | 算術(shù)符運算 |
|---|---|---|---|
| np.add(ndarray1, ndarray2) | 兩個數(shù)組相加 | d1=np.array([1,2,3])>>d2=np.array([4,5,6])>>np.add(d1,d2) | d1 + d2 |
| np.subtract(ndarray1, ndarray2) | 兩個數(shù)組相減 | d1=np.array([1,2,3])>>d2=np.array([4,5,6])>>np.subtract(d1,d2) | d1-d2 |
| np.multiply(ndarray1, ndarray2) | 兩個數(shù)組相乘 | d1=np.array([1,2,3])>>d2=np.array([4,5,6])>>np.multiply(d1,d2) | d1*d2 |
| np.divide(ndarray1, ndarray2)、np.floor_divide(ndarray1, ndarray2) | 兩個數(shù)組相除、整除 | d1=np.array([1,2,3])>>d2=np.array([4,5,6])>>np.divide(d2,d1) | d2/d1 |
| np.power(ndarray1, ndarray2) | ndarray1的每個元素作為dnarray2每個元素的冪進行計算 | d1=np.array([1,2,3])>>d2=np.array([4,5,6])>>np.power(d2,d1) | d2**d1 |
| np.maximum(ndarray1, ndarray2)、np.fmax(ndarray1, ndarray2) | 元素最大值,fmax忽略nan值 | d1=np.array([7,2,3])>>d2=np.array([4,5,6])>>np.maximum(d2,d1) | -- |
| np.mod(ndarray1, ndarray2) | 除法的余數(shù) | d1=np.array([7,10,8])>>d2=np.array([4,5,6])>>np.mod(d1,d2) | d1%d2 |
| np.greater(ndarray1, ndarray2) | 判斷ndarray1的元素是否大于ndarray2,輸出布爾型,類似的函數(shù)還有g(shù)reater_equal、less、not_equal、equal等 | d1=np.array([10,8,11])>>d2=np.array([7,9,8])>>np.greater(d1,d2) | d1>d2 |
2.2.2.3、數(shù)組級別函數(shù)
- 數(shù)組級別的函數(shù)一般是一些統(tǒng)計函數(shù),像聚合類的函數(shù)求和(sum),求平均(mean)等。
| 函數(shù) | 用法 | 舉例 |
|---|---|---|
| np.sum(dnarray,axis= ) | 計算指定軸上的元素之和,axis=0豎向計算,axis=1水平計算 | d1=np.array([[7,10,8],[1,2,3]])>>np.sum(d1,axis=0) |
| np.mean(dnarray,axis= ) | 計算指定軸上的元素平均值,axis=0豎向計算,axis=1水平計算。 | d1=np.array([[7,10,8],[1,2,3]])>>np.mean(d1,axis=0) |
| np.std、np.var | 計算標準差、方差 | d1=np.array([[7,10,8],[1,2,3]])>>np.std(d1,axis=0) |
| np.percentile(a,q,axis= ) | 沿著指定的軸計算數(shù)據(jù)的第q百分位數(shù),q=50則相當于median函數(shù) | d1=np.array([[7,10,8],[1,2,3]])>>np.percentile(d1,[10,50],axis=0) |
| np.ptp(a,axis= ) | 沿著指定的軸計算值的范圍(最大值-最小值),相當于max-min | d1=np.array([[7,10,8],[1,2,3]])>>np.ptp(d1,axis=1) |
2.2.2.4、集合函數(shù)
| 函數(shù) | 用法 | 舉例 |
|---|---|---|
| np.unique(dnarray) | 輸出dnarray中的所有元素(剔除重復值)的一維數(shù)組 | d1=np.array([[7,2,8,3],[8,2,3,7]])>>np.unique(d1) |
| np.intersectld(dnarray1,dnarray2) | 交集 | d2=np.array([4,8,6])>>d3=np.array([7,8,9])>>np.intersect1d(d2,d3) |
| np.union1d(dnarray1,dnarray2) | 并集 | d2=np.array([4,8,6])>>d3=np.array([7,8,9])>>np.union1d(d2,d3) |
| np.in1d(dnarray1,dnarray2) | dnarray1的每個元素是否被dnarray2包含,輸出布爾型 | d2=np.array([4,8,6])>>d3=np.array([7,9,8])>>np.in1d(d2,d3) |
| np.setdiff1d(dnarray1,dnarray2) | dnarray1中不被dnarray2包含的元素 | d2=np.array([4,8,6])>>d3=np.array([7,9,8])>>np.setdiff1d(d2,d3) |
| np.setxor1d(dnarray1,dnarray2) | 差集 | d2=np.array([4,8,6])>>d3=np.array([7,9,8])>>np.setxor1d(d2,d3) |
2.3、搜索與排序
- 排序函數(shù):sort函數(shù)和argsort函數(shù)。
- 搜索函數(shù):agrmax和argmin函數(shù)。
- 條件復制:np.where可以自定義返回滿足條件的情況,np.extract返回滿足條件的元素值。
| 功能 | 函數(shù) | 說明 | 舉例 |
|---|---|---|---|
| 正向排序 | np.sort() | axis=-1(默認),沿著最后一個軸排序;axis=None,變成一維數(shù)組進行排序。 | d1=np.array([[7,10,8,1],[7,1,2,3]])>>np.sort(d1,axis=None) |
| 反向排序 | np.array(sorted( ,reverse= True)) | np.sort函數(shù)無reverse參數(shù),用python自帶的sorted函數(shù)轉(zhuǎn)為列表進行排序。 | d1=np.array([[7,10,8,1],[7,1,2,3]])>>n=np.array(sorted(np.ravel(d1),reverse= True)) |
| 排序索引 | np.argsort() | 數(shù)組進行正向排序后每個元素對應原數(shù)組的索引位置 | d1=np.array([[7,10,8,1],[7,1,2,3]])>>np.argsort(d1,axis=None) |
| 最大索引 | np.argmax() | 最大值對應的索引位置,axis默認為None;axis=0,豎向比較;axis=1,水平比較 | d1=np.array([7,10,8,1])>>np.argmax(d1) |
| 最小索引 | np.argmin() | 最小值對應的索引位置,axis默認為None。 | d1=np.array([7,10,8,1])>>np.argmin(d1) |
| 條件復制 | np.where(condition, [x, y]) | 根據(jù)條件,True返回x,F(xiàn)alse返回y | d1=np.arange(5,17,dtype=int).reshape(4,3)>>np.where(d1>10,'兩位數(shù)','一位數(shù)') |
| 條件復制 | np.extract(condition, dnarray) | 返回dnarray中條件為True對應元素的一維數(shù)組 | d1=np.arange(5,17,dtype=int).reshape(4,3)>>np.extract(np.mod(d1,3)==0,d1).shape |
3、Numpy文件讀寫
3.1、文件讀取和儲存
- 文件讀取:使用genfromtxt函數(shù)和loadtxt函數(shù)讀取txt和csv文件,兩個函數(shù)功能類似,genfromtxt針對的更多是結(jié)構(gòu)化數(shù)據(jù)。
- 文件存儲:一般存儲為txt或者csv格式,使用savetxt(fname,data,delimiter,fmt)函數(shù)保存路徑、數(shù)據(jù)、分隔符和格式。
- 特別說明:數(shù)據(jù)分析中不常用numpy讀取數(shù)據(jù),掌握既可。
| 函數(shù) | 用法 | 舉例 |
|---|---|---|
| np.genfromtxt(fname,delimiter= ,skip_header= ) | 讀取有特定分隔符的文件,并跳過部分行數(shù),類似的函數(shù)有np.loadtxt | data=np.genfromtxt(r"c:\data\第二章\123.txt',delimiter=',',skip_header=1) |
| np.savetxt(fname,data,delimiter,fmt) | 存儲文件,指定路徑、數(shù)據(jù)、分隔符及存儲格式(如存儲為有2位小數(shù)的浮點型,則fmt='%.2f') | data=np.savetxt(r"c:\data\第二章\1234.txt',data,delimiter=',',fmt='%.3f') |
3.2、字符串處理
- Numpy提供char模塊處理列表的字符串,運用向量化運算方式。
- char模塊的函數(shù)和python自帶的字符串處理函數(shù)類似,但可以對數(shù)組、列表的所有元素同時運算,操作更簡便、運行更快,如連接、切片、刪除、替換等。
- 為求簡便,下表函數(shù)以列表數(shù)據(jù)結(jié)構(gòu)進行舉例。
| 函數(shù) | 用法 | 舉例 | PYthon自帶 |
|---|---|---|---|
| np.char.add(x1,x2) | 連接字符串,x1和x2的形狀必須相同 | np.char.add(['中國','武漢'],['加油','加油']) | -- |
| np.char.multiply(a,i) | 對a中的元素進行i次復制連接 | np.char.multiply(['中國','武漢'],3) | [i*3 for i in ['中國','武漢']] |
| np.char.center(a, width,fillchar= ) | 以a的元素居中,指定字符串寬度(width),兩邊填充指定的1個字符(fillchar)。 | np.char.center(['中國加油','武漢加油'],6,fillchar="?") | -- |
| np.char.capitalize(a) | a的所有元素首字母大寫 | np.char.capitalize(["hello","love"]) | [i.capitalize() for i in ["hello","love"]] |
| np.char.title(a) | a的所有字母首字母大寫 | char.title(['hello world','hello python']) | [i.title() for i in ['hello world','hello python']] |
| np.char.lower(a)、np.char.upper(a) | a的所有元素轉(zhuǎn)小寫、轉(zhuǎn)大寫 | np.char.upper(['asde','derf']) | [i.upper() for i in ['asde','derf']] |
| np.char.join(x1,x2) | x1的元素和x2的元素挨個連接 | np.char.join([':','_'],['hello','world']) | -- |
| np.char.replace(a,old,new, count= ) | 替換a中所有元素old的部分為new部分,count=None(默認)對元素所有old進行替換,count=num規(guī)定替換的old個數(shù) | np.char.replace(['我要好好學數(shù)據(jù)分析,好好學','我要好好學Python,好好學'],'好好學','認真學',count=1) | [i.replace('好好學','認真學',1) for i in ['我要好好學數(shù)據(jù)分析,好好學','我要好好學Python,好好學']] |
| np.char.strip(a,chars= )、np.char.rstrip(a, chars= )、np.char.lstrip(a, chars= ) | 刪除前導或后置字符,chars默認為空格。rstrip只刪除后置(從右邊right),lstrip只刪除前導(從左邊left) | np.char.strip(["-hello","love-"],'-') | -- |
| np.char.split(a,sep= ,maxsplit= ) | 以sep分割a中每個元素,maxsplit默認等于None | np.char.split(['Mary,Jone,Peter','Alice,Bob,Tom'],sep=',') | -- |
| np.char.find(a,sub,start= ,end= ) | 找到a每個元素中sub字符串的最低索引,輸出索引數(shù)組,可利用start和end進行元素切片 | np.char.find(['asde','deasrf','hdekas','hdehh'],'as') | |
| np.char.count(a, sub, start=0, end=None) | 計算a中每個元素包含sub字符串的次數(shù),可利用start和end進行元素切片 | np.char.count(['中國武漢','亞洲中國'],'武漢') | -- |
| np.char.islower(a) | 判斷函數(shù),判斷a中每個元素是否都是小寫,輸出布爾型,類似的還有isalnum、isalpha、isdigit、isupper等 | np.char.islower(['love','worlD','EARTH']) | -- |
| np.char.startswith(a, prefix, start= , end= )、np.char.endswith(a, suffix, start= , end= ) | 判斷函數(shù),判斷a中每個元素是否以prefix開頭/以suffix結(jié)尾,輸出布爾型,可利用start和end進行元素切片 | np.char.endswith(['中國武漢','亞洲中國'],'武漢') | -- |
<u>注:如果覺得每次都要寫np.char.很麻煩,可以在一開始使用該模塊寫:from numpy import char,之后調(diào)用函數(shù)寫char.就可以。
4、Numpy統(tǒng)計計算
4.1、隨機數(shù)生成
- 隨機數(shù)通過np.random函數(shù)生成偽隨機數(shù),代碼每次運行,結(jié)果都不一樣。
- 為了保持結(jié)果一致,需要使用np.random.seed函數(shù)固定初始化種子。
| 函數(shù) | 用法 | 舉例 |
|---|---|---|
| np.random.seed(seed) | 制定隨機數(shù)生成器種子,以保證隨機數(shù)函數(shù)運行結(jié)果一致。seed可以隨便定義,無要求。 | np.random.seed(1) |
| np.set_printoptions(precision= ,threshold= ) | 設(shè)置numpy的打印格式,precision表示浮點數(shù)輸出的小數(shù)位數(shù),threshold表示摘要輸出時的元素閾值,其他參數(shù)可以輸入help(np.set_printoptions)查詢 | np.set_printoptions(precision=2) |
| np.random.random(size) | 生成size形狀的0-1之間的隨機浮點數(shù) | np.random.random((2,3)) |
| np.random.rand(d1,d2,...) | 生成(d1,d2,...)形狀的0-1之間服從均勻分布的隨機浮點數(shù),和random函數(shù)類似 | np.random.rand(2,3) |
| np.random.randint(low,high,size) | 生成[low,high)之間size形狀的隨機整數(shù) | np.random.randint(3,18,(2,3)) |
| np.random.uniform(low,high,size) | 生成[low,high)之間size形狀的均勻分布隨機浮點數(shù),low默認等于0,high默認等于1 | np.random.uniform(3,18,(2,3)) |
| np.random.normal(loc,scale,size) | 生成均值為loc,標準差為scale,形狀為size的正態(tài)分布隨機數(shù)。loc默認為0,scale默認為1。 | np.random.normal(3,18,(2,3)) |
| np.random.randn(d1,d2,...) | 生成均值為0,標準差為1,形狀為(d1,d2,...)的標準正態(tài)分布隨機數(shù)。 | np.random.randn(2,3) |
| np.random.shuffle(a) | 對a的所有元素進行隨機重新排序,原數(shù)組a發(fā)生改變。 | d=np.array([2,3,4,7,8,10])>>np.random.shuffle(d)>>d |
| np.random.permutation(a) | 對a的所有元素進行隨機重新排序,生成視圖,原數(shù)組a不發(fā)生改變。 | d=np.array([2,3,4,7,8,10])>>d1=np.random.permutation(d)>>d1 |
4.2、線性代數(shù)
| 函數(shù) | 用法 | 舉例 |
|---|---|---|
| np.dot(a,b) | a和b數(shù)組的點積。a、b若均為一維數(shù)組,dot就是ab各元素相乘后的總和。a、b若均為二維數(shù)組,dot就執(zhí)行矩陣運算(a的行數(shù)必須等于b的列數(shù)) | a=np.arange(0,10).reshape(5,2)>>b=np.arange(0,10).reshape(2,5)>>np.dot(a,b) |
| np.transpose(a) | 將a進行矩陣轉(zhuǎn)置,列轉(zhuǎn)成行 | a=np.arange(0,10).reshape(5,2)>>np.transpose(a) |
| np.linalg.inv(a) | 求a的逆矩陣 | np.linalg.inv([[1,2],[3,4]]) |
| np.diag(a,k= ) | 取出a對角線的元素,k=0(默認)取左對角線 | np.diag([[1,2],[3,4]]) |
| np.linalg.solve(a,b ) | 解一個線性矩陣方程 | a=np.array([[39],[34],[36]])>>b=np.random.randint(1,4,(3,3))>>np.set_printoptions(suppress= True)>>np.linalg.solve(b,a) |
寫在最后的話
這是本人學習Peter老師的《2020年P(guān)ython數(shù)據(jù)分析師特訓營》課程整理的學習筆記,有需要觀看視頻的小伙伴,B站指路:https://www.bilibili.com/video/av81847305。
每個函數(shù)都附有我自己寫的例子,大家可直接復制到編輯器中運行,如有錯誤,歡迎指正,我及時更改。