荣一不是阿贝尔

技术决定长度,‘情怀’决定高度。

导航

Numpy学习

Numpy包的学习

一、引言

  最近刚开始学习Python,掌握了基本的一些语法后,开始着手学习常用的包。今天与大家分享的是Numpy包。Numpy包是数值计算的基础,贡献了多维数组这种数据存储形式,大大提升了运算效率。说到多维数组自然让人联想起R语言。图1是R语言和Python的对比,没有高下,只有左右。

图1

  好了,下面进入正题。
  
本文的结构分为三部分,第一部分为我学习numpy包时用的思维导图,第二部分为按照思维导图顺序编写的相应的代码,第三部分为参考文献。

二、思维导图

 

三、代码实例

# coding: utf-8

# 1.索引—类似R语言,但是又不一样。最主要的区别就是df[2,2]在R语言中表示第二行第二列的元素,而python中表示第3行第3列的元素。
import numpy as np
df=np.array(((1,2,3),(4,5,6),(7,8,9),(10,11,12)))
df

df[2,1]


# 1.1元素
print(df[[0,2],[2,2]],'\n')

# 1.2行列切片
df[np.ix_([0,2],[2,2])]
df[1,:]  #指定行
df[::2,1] #指定第2列,并且行间隔为2
df[:,2]  #指定列
df[:,[1,2]]

# #'...'可以用来替换0个或者多个':'
import numpy as np
x=np.array([1,12,25,8,15,35,50,7,2,10])
x
x[3:7]
#x[1:9:2]

x2d=np.array([(100,200,300),(111,222,333),(123,456,789),(125,457,789),(127,459,793),(129,461,795)])
x2d[0:4,0:3]

x2d

x2d[:,2]

x2d[...] #相当于x2d[:,:]

# 1.3当切片遇上for循环

x=np.array([1,12,15,8,25,35,50,7,2,10])
for i in x:
    print(i)
        
q=np.array([[0],[0]])
for row in x2d:
    print(row)
    
# 2.数组的变形及转换方法-revel、reshape、resize

# 注:下面介绍的方法默认的都是按照行的顺序输出数组
# 

# In[ ]:

x2d


# 2.1不改变原来数组x2d

# In[ ]:

x2d.ravel()


# In[ ]:

x2d.reshape(3,6)


# In[ ]:

x2d.reshape(1,18)


# 2.2改变原来的数组x2d

# In[ ]:

x2d.resize(2,9)
x2d  #已经改变了原来的x2d


# In[ ]:

x2d.tolist()


# In[ ]:

x2d.tofile


# In[ ]:

x2d.tostring


# 3.与数组有关的类

# 3.1矩阵子类

# In[ ]:

import numpy as np
m1=np.matrix('1 2 3;4 5 6;7 8 9')
m1


# In[ ]:

m2=np.matrix('4 5 6;7 8 9;10 11 12')
m2


# In[ ]:

m1*m2


# 3.2掩码数组

# In[ ]:

import numpy.ma as ma
x=np.array([72,79,85,90,150,-135,120,-10,60,100])
mx=ma.masked_array(x,mask=[0,0,0,0,0,1,0,1,0,0])
mx2=ma.masked_array(x,x<0)
x.mean()


# In[ ]:

x


# In[ ]:

mx


# In[ ]:

mx2


# In[ ]:

x.mean()


# In[ ]:

mx.mean()


# In[ ]:

mx2.mean()


# 3.3结构化的数组

# In[ ]:

import numpy as np
d=np.dtype({'names':['temp','envir','city'],'formats':['i4','i4','a25']})
c=np.array([(-10,90,'Dalian'),(5,85,'Hangzhou'),(-20,80,'Mudanjiang'),(0,80,'Dongyin')],dtype=d)


# In[ ]:

print(c[0])


# In[ ]:

print(c['temp'])


# In[ ]:

print(c['envir'])


# In[ ]:

print(c['city'])


# 4.通用函数对象

# In[ ]:

import numpy as np
x1=np.array([72,79,85,90,150,-135,120,-10,60,100])
x2=np.array([72,79,85,90,150,-135,120,-10,60,100])
x_angle=np.array([30,60,90,120,150,180])
x_sqr=np.array([9,16,25,225,400,625])
x_bit=np.array([2,4,8,16,32,64])


# In[ ]:

np.greater_equal(x1,x2)


# In[ ]:

np.mod(x1,x2)


# In[ ]:

np.exp(x1)


# In[ ]:

np.reciprocal(x1)


# In[ ]:

np.negative(x1)


# In[ ]:

np.isreal(x1)


# In[ ]:

np.isnan(x1)


# In[ ]:

np.sqrt(np.square(x_sqr))


# In[ ]:

np.sin(x_angle*np.pi/180)


# In[ ]:

np.tan(x_angle*np.pi/180)


# In[ ]:

np.right_shift(x_bit,1)


# In[ ]:

x_bit


# In[ ]:

np.left_shift(x_bit,2)


# 5.Numpy的数学模块

# 5.1numpy.linalg模块—‘线性代数模块’

# In[ ]:

import numpy as np
from numpy import linalg as LA
arr2d=np.array([(1,2,3),(4,5,6),(7,8,9)])
eig_val,eig_vec=LA.eig(arr2d)


# In[ ]:

eig_val


# In[ ]:

eig_vec


# In[ ]:

LA.norm(arr2d)   #矩阵或者向量范数


# In[ ]:

LA.det(arr2d)  #行列式


# In[ ]:

LA.inv(arr2d)  #


# In[ ]:

arr1=np.array([[2,3],[3,4]])  #方程系数
arr2=np.array([4,5])  #方程组常数项
results=np.linalg.solve(arr1,arr2)  #求解线性矩阵方程或者线性标量方程组
results


# In[ ]:

np.allclose(np.dot(arr1,results),arr2)  #np.dot 点积
                                        #np.allclose()  Returns True if two arrays are element-wise equal within a tolerance.


# 5.2numpy.random模块—‘随机抽样模块’

# In[ ]:

import numpy as np
np.random.permutation(10)


# In[ ]:

np.random.randint(20,50,size=10)  #均匀分布


# In[ ]:

np.random.random_sample(10)


# In[ ]:

np.random.chisquare(10,5)

四、参考文献(推荐阅读)

 [1].http://mp.weixin.qq.com/s/54fQScsNn9Sg-G02CEoaOw

 [2].《Python科学计算基础教程》  (大部分实例来源于此)

 [3].https://docs.scipy.org/doc/numpy/reference/routines.linalg.html (详细介绍了np.linalg)

 [4].https://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html 

 [5].https://docs.scipy.org/doc/numpy/reference/routines.random.html  (详细介绍了np.random)

 

 

 

 

posted on 2018-01-25 14:46  荣一不是阿贝尔  阅读(315)  评论(0)    收藏  举报