python numpy 基础2
2014-07-23 15:48
381 查看
1在数组内部使用条件逻辑(使用where)
假设我们有两个实数值数组:xarr和yarr,和一个布尔值数组condIn[140]:xarr=np.array([1.1,1.2,1.3,1.4,1.5])
In[141]:yarr=np.array([2.1,2.2,2.3,2.4,2.5])
In[142]:cond=np.array([True,False,True,True,False])
根据cond数组中的条件分别取xarr和yarr中的值
In[143]:result=[(xifcelsey).....:
forx,y,cinzip(xarr,yarr,cond)]
In[144]:resultOut[144]:[1.1000000000000001,2.2000000000000002,1.3,1.3999999999999999,2.5]
上式中有两个问题:(1)对于大数组速度较慢(2)不能使用在多维数组中
使用numpy的where
In[145]:result=np.where(cond,xarr,yarr)
In[146]:resultOut[146]:array([1.1,2.2,1.3,1.4,2.5])
where中的第2个和第3个条件可以不必是数组,也可以是纯量(单个数值)
In[147]:arr=randn(4,4)
In[148]:arr
Out[148]:array([[0.6372,2.2043,1.7904,0.0752],
[-1.5926,-1.1536,0.4413,0.3483],
[-0.1798,0.3299,0.7827,-0.7585],
[0.5857,0.1619,1.3583,-1.3865]])
In[149]:np.where(arr>0,2,-2)
Out[149]:array([[2,2,2,2],
[-2,-2,2,2],
[-2,2,2,-2],
[2,2,2,-2]])
#setonlypositivevaluesto2
In[150]:np.where(arr>0,2,arr)
Out[150]:array([[2.,2.,2.,2.],
[-1.5926,-1.1536,2.,2.],
[-0.1798,2.,2.,-0.7585],
[2.,2.,2.,-1.3865]])
使用where可以编写更复杂的逻辑(1默认等同于True,0默认等同于False)
result=[]foriinrange(n):
ifcond1[i]andcond2[i]:
result.append(0)
elifcond1[i]:
result.append(1)
elifcond2[i]:
result.append(2)
else:
result.append(3)
上式等同于下式
np.where(cond1&cond2,0,
np.where(cond1,1,
np.where(cond2,2,3)))
2数学统计方法
例如:均值函数mean,求和函数sumIn[151]:arr=np.random.randn(5,4)
In[152]:arr.mean()
Out[152]:0.062814911084854597
In[153]:np.mean(arr)
Out[153]:0.062814911084854597
In[154]:arr.sum()
Out[154]:1.2562982216970919
均值函数mean和求和函数sum都有一个可选的参数axis,使用如下:
In[155]:arr.mean(axis=1)
Out[155]:array([-1.2833,0.2844,0.6574,0.6743,-0.0187])
In[156]:arr.sum(0)
Out[156]:array([-3.1003,-1.6189,1.4044,4.5712])
基本的统计函数:
MethodDescription
sumSumofalltheelementsinthearrayoralonganaxis.Zero-lengtharrayshavesum0.
meanArithmeticmean.Zero-lengtharrayshaveNaNmean.
std,varStandarddeviationandvariance,respectively,withoptionaldegreesoffreedomadjust-ment(defaultdenominatorn).
min,maxMinimumandmaximum.
argmin,argmaxIndicesofminimumandmaximumelements,respectively.
cumsumCumulativesumofelementsstartingfrom0cumprod
Cumulativeproductofelementsstartingfrom1
布尔数组的方法
对于布尔数组而言,sum方法只会统计元素等于True的个数
其他的方法有:any和all(都是针对数组值是否为True而言),用法如下:
In[162]:bools=np.array([False,False,True,False])
In[163]:bools.any()
Out[163]:True
In[164]:bools.all()
Out[164]:False
排序
对于一维数组
In[165]:arr=randn(8)
In[166]:arr
Out[166]:array([0.6903,0.4678,0.0968,-0.1349,0.9879,0.0185,-1.3147,-0.5425])
In[167]:arr.sort()
In[168]:arr
Out[168]:array([-1.3147,-0.5425,-0.1349,0.0185,0.0968,0.4678,0.6903,0.9879])
对于二维数组
In[169]:arr=randn(5,3)
In[170]:arr
Out[170]:array([[-0.7139,-1.6331,-0.4959],
[0.8236,-1.3132,-0.1935],
[-1.6748,3.0336,-0.863],
[-0.3161,0.5362,-2.468],
[0.9058,1.1184,-1.0516]])
In[171]:arr.sort(1)
In[172]:arr
Out[172]:array([[-1.6331,-0.7139,-0.4959],
[-1.3132,-0.1935,0.8236],
[-1.6748,-0.863,3.0336],
[-2.468,-0.3161,0.5362],
[-1.0516,0.9058,1.1184]])
3唯一性(相当于SQL的distinct)和其他集合逻辑
<strong>In[176]:names=np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])
In[177]:np.unique(names)Out[177]:
array(['Bob','Joe','Will'],dtype='|S4')
</strong>
上式等同于下式:
In[180]:sorted(set(names))
Out[180]:['Bob','Joe','Will']
numpy的in1d方法用来检验某数组中元素是否全部来源于后面的一个数组
In[181]:values=np.array([6,0,0,3,2,5,6])
In[182]:np.in1d(values,[2,3,6])
Out[182]:array([True,False,False,True,True,False,True],dtype=bool)
对集合的操作类型及描述:
MethodDescription
unique(x)Computethesorted,uniqueelementsinx
intersect1d(x,y)Computethesorted,commonelementsinxandy
union1d(x,y)Computethesortedunionofelements
in1d(x,y)Computeabooleanarrayindicatingwhethereachelementofxiscontainediny
setdiff1d(x,y)Setdifference,elementsinxthatarenotiny
setxor1d(x,y)Setsymmetricdifferences;elementsthatareineitherofthearrays,butnotboth
4线性代数操作
如:矩阵乘法,矩阵分解,行列式运算。例如numpy的dot方法就是计算两个矩阵的乘法,用法如下:
In[194]:x=np.array([[1.,2.,3.],[4.,5.,6.]])
In[195]:y=np.array([[6.,23.],[-1,7],[8,9]])
In[198]:x.dot(y)#equivalentlynp.dot(x,y)
Out[198]:array([[28.,64.],[67.,181.]])
numpy.linalg是一个矩阵运算的相关函数方法集合,其实现了Fortran工业标准的函数库,这也是MATLABandR,BLAS,LA-PACK等语言所使用的。
使用实例如下:
In[201]:fromnumpy.linalgimportinv,qr
In[202]:X=randn(5,5)
In[203]:mat=X.T.dot(X)
In[204]:inv(mat)
Out[204]:array([[3.0361,-0.1808,-0.6878,-2.8285,-1.1911],
[-0.1808,0.5035,0.1215,0.6702,0.0956],
[-0.6878,0.1215,0.2904,0.8081,0.3049],
[-2.8285,0.6702,0.8081,3.4152,1.1557],
[-1.1911,0.0956,0.3049,1.1557,0.6051]])
In[206]:q,r=qr(mat)
In[207]:r
Out[207]:array([[-6.9271,7.389,6.1227,-7.1163,-4.9215],
[0.,-3.9735,-0.8671,2.9747,-5.7402],
[0.,0.,-10.2681,1.8909,1.6079],
[0.,0.,0.,-1.2996,3.3577],
[0.,0.,0.,0.,0.5571]])
相关方法如下:
FunctionDescription
diagReturnthediagonal(oroff-diagonal)elementsofasquarematrixasa1Darray,orconverta1D
arrayintoasquarematrixwithzerosontheoff-diagonal
dotMatrixmultiplication
traceComputethesumofthediagonalelements
detComputethematrixdeterminant
eigComputetheeigenvaluesandeigenvectorsofasquarematrix
invComputetheinverseofasquarematrix
pinvComputetheMoore-Penrosepseudo-inverseinverseofasquarematrix
qrComputetheQRdecomposition
svdComputethesingularvaluedecomposition(SVD)
solveSolvethelinearsystemAx=bforx,whereAisasquarematrix
lstsqComputetheleast-squaressolutiontoy=Xb
相关文章推荐
- python numpy 基础教程
- 《python for data analysis》笔记三--Numpy基础:arrays和向量化计算2
- Python Numpy,Pandas基础笔记
- [转]numpy线性代数基础 - Python和MATLAB矩阵处理的不同
- Python数据分析|第4章 NumPy基础:数组和矢量计算
- Python机器学习(一)--Numpy基础
- 利用Python数据分析:Numpy基础(三)
- Python基础-numpy使用
- 利用Python进行数据分析(6) NumPy基础: 矢量计算
- 利用Python数据分析:Numpy基础(一)
- python - numpy 基础的小总结
- Python-NumPy基础
- 【Numpy】python机器学习包Numpy基础知识学习
- Python基础-numpy中矩阵增加行或列
- 利用python进行数据分析-NumPy基础2
- 《python for data analysis》笔记二--Numpy 基础:arrays 和向量化计算 1
- python基础(Numpy,Pandas,Matplotlib,
- 利用python进行数据分析-NumPy基础
- 【Linux基础】Linux/Windows下安装python、Numpy、Matplotlib
- 利用Python数据分析:Numpy基础(二)