Python:基本运算、基本函数(包括复数)、Math模块、NumPy模块

时间:2022-06-26 08:08:35

基本运算

  • x**2 : x^2 若x是mat矩阵,那就表示x内每个元素求平方
  • inf:表示正无穷
  • 逻辑运算符:and,or,not

字典的get方法

a.get(k,d)
  • 1
  • 1

get相当于一条if…else…语句。若k在字典a中,则返回a[k];若k不在a中,则返回参数d。

l = {5:2,3:4}
l.get(3,0) 返回值是4;
l.get(1,0) 返回值是0;
  • 1
  • 2
  • 3
Python:基本运算、基本函数(包括复数)、Math模块、NumPy模块
  • 1
  • 2
  • 3

type函数:返回数据类型

type(x):返回x的类型
type(x)._name_:返回该类型的字符串表示
  • 1
  • 2
  • 1
  • 2

len函数:获得list或str的长度

reload函数:将之前导入过的模块重新加载进来

对复数的处理

complex(a,b)    #建立a+bj的复数
complex('2+1j') #将字符串形式的复数转成复数
real(x) #取复数x的实部
imag(x) #取复数x的虚部
abs(x) #求x的模
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

next函数

本函数是返回迭代器的下一个元素的值。 
Python 3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。

my_generator = (letter for letter in 'abcdefg')
next(my_generator) >>>'a'
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

math模块

Python内置math模块,提供大部分常用数学运算函数。

使用 math 模块

math 模块是标准库中的,所以不用安装,可以直接使用。使用方法是:

>>> import math
  • 1
  • 1

常用函数

ceil(x) 取顶
floor(x) 取底
fabs(x) 取绝对值
factorial (x) 阶乘
hypot(x,y) 计算sqrt(x*x+y*y)
pow(x,y) x的y次方
sqrt(x) 开平方
log(x)
log10(x)
trunc(x) 截断取整数部分
isnan (x) 判断是否NaN(not a number)
degrees (x) 弧度转角度
radians(x) 角度转弧度
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x) #例子:
a=math.atan(x) #计算x的反正切值
seta=math.degrees(a) #将弧度制表示的a转换成角度制表示的seta
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

Numpy模块

模块的导入

from numpy import array/mat/shape/*

mm=array([1,2,3])   //
ss=mat([1,2,3])
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

Numpy中,mat必须是2维的,但是array可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。 
在numpy中matrix的主要优势是:相对简单的乘法运算符号。例如,a和b是两个matrices,那么a*b,就是矩阵积。

a=mat([1,2,3]) 是矩阵,则 a.A 则转换成了数组,反之,a.M则转换成了矩阵

数组array

数组array的参数是列表,有

a=array([1,2,3])
b=array([[1,2,3],[4,5,6])
  • 1
  • 2
  • 1
  • 2

它有以下一些属性:

a.ndim      #秩,是数组轴的个数
a.shape #数组的维度
a.size #元素的总个数
a.dtype #一个用来描述数组中元素类型的对象
a.dtype.name #返回字符串形式的类型名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

常用的Numpy运算

取矩阵中的某一行 ss[1,:] 或该行的某两列 ss[1,0:2] 
将数组转换成矩阵 randMat=mat(random.rand(4,4)) 
矩阵求逆 randMat.I 
单位阵 eye(4) 
零矩阵 zeros((x,y)) 建立x行y列的零矩阵 
最大值和最小值 a.max(),a.min() ,而a.max(0) 表示按列选取每列的最大值 
最大/小元素的下标 a.argmax(),a.argmin()

#作为方法
x.sum() #所有元素相加
x.sum(axis=0) #按列相加
x.sum(axis=1) #按行相加
#作为函数
sum(a,axis=0) ss.mean()
mean(a,axis=0(或1)) #按列或行求均值 var(a)
var(a,axis=0(或1)) #按列或行求方差 std(a)
std(a,axis=0(或1)) #按列或行求标准差 ss.T或ss.transpose() #转置
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

shape的用法

  1. shape作为函数,可以读取矩阵的长度,它的输入参数可以是一个矩阵。例如:
shape(3):一个单独的数字,返回值为空
shape([1]):一维矩阵[1]返回值为(1L,)
shape([[1],[2]]) :二维矩阵[[1],[2]],返回两个值
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
  1. shape还可以作为矩阵的方法被调用,如
e=eye(3)
e.shape
>>(3L,3L)
e.shape[0]//读取第一维度的长度
>>3L
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

tile函数:重复某个数组

a=[0,1,2]
b=tile(a,2)
>>>b=([0,1,2,0,1,2])
b=tile(a,(2,1))
>>>b=([[0,1,2],
[0,1,2]])
b=tile(a,(1,2))
>>>b=([[0,1,2],[0,1,2]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

range函数:构造等差数列

range(1,5):代表从1到5,不包含5:[1,2,3,4]
range(1,5,2):代表从1到5,间隔为2,不包含5:[1,3]
range(5):代表从0到5,不包含5:[0,1,2,3,4]
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

sort,sorted,argsort函数:排序

x.sort():

只可以应用于list对象,且是原地排序,排序过后list发生改变。

x.argsort():

得到矩阵每行的升序排序

sorted函数

排序并生成新的容器

一. 如果是普通的列表,可以直接使用sorted,如

a=[1,4,2,3,7]
b=sorted(a)
  • 1
  • 2
  • 1
  • 2

二. 如果是由元祖构成的元祖列表,就比较复杂,假设有

L=[('b',2),('a',1),('c',3)]
  • 1
  • 1

有两种写法或格式

  1. cmp格式
sorted(L,cmp=lambda x,y:cmp(x[1],y[1])
  • 1
  • 1
  1. key格式
sorted(L,key=lambda x:x[1])
  • 1
  • 1

其中还有个reverse可选项,reverse=True 则输出倒序,reverse=False 则输出正序。

三. 如果是字典,那么格式也略复杂 
假设有dic={'a':31,'bc':52,'c':3,'33':56} 
在python 3中,可以写成

sorted(dic.items(),key=lambda d:d[1],reserve=False)
  • 1
  • 1

其中,dic.items 返回字典键值对的元祖集合set 
还可以写成

sorted(dic.items(),key=operator.itemgetter(1),reserve=False)
  • 1
  • 1

其中,operator.itemgetter() 函数可以获取对象的某些维的数据

array的形状操作

a.ravel()   #展平成一维数组,a.flatten() 与之类似
a.reshape(m,n) #返回一个新数组,但原数组本身不变
a.resize(m,n) #返回一个新数组的同时也改变原数组本身
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

其他通用函数或方法

a.copy()    #对元素进行复制
c=sqrt(a) #计算元素的平方根
c=exp(a)
c=abs(a)
c=add(a,b) #a和b对应元素相加
c=subtract(a,b) #a和b对应元素相减
c=multiply(a,b) #a和b对应元素相乘
c=divide(a,b) #a和b对应元素相除
nonzero(a) #返回a中所有不为零的元素的下标位置
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

对array和matrix而言,(a>3)或(a==3) 返回一个同类型的布尔值 
例如:

a=array([1,2,3])
b=(a==2) >>>b=array([False,True,False])
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

Numpy中的线性代数子库linalg

linalg中包含了许多线性代数的方法

linalg.det(a)   #求a的行列式
linalg.inv(a) #求a的逆矩阵
  • 1
  • 2
 
  • 1
  • 2

基本运算

  • x**2 : x^2 若x是mat矩阵,那就表示x内每个元素求平方
  • inf:表示正无穷
  • 逻辑运算符:and,or,not

基本函数

字典的get方法

a.get(k,d)
  • 1
  • 1

get相当于一条if…else…语句。若k在字典a中,则返回a[k];若k不在a中,则返回参数d。

l = {5:2,3:4}
l.get(3,0) 返回值是4;
l.get(1,0) 返回值是0;
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

type函数:返回数据类型

type(x):返回x的类型
type(x)._name_:返回该类型的字符串表示
  • 1
  • 2
  • 1
  • 2

len函数:获得list或str的长度

reload函数:将之前导入过的模块重新加载进来

对复数的处理

complex(a,b)    #建立a+bj的复数
complex('2+1j') #将字符串形式的复数转成复数
real(x) #取复数x的实部
imag(x) #取复数x的虚部
abs(x) #求x的模
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

next函数

本函数是返回迭代器的下一个元素的值。 
Python 3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。

my_generator = (letter for letter in 'abcdefg')
next(my_generator) >>>'a'
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

math模块

Python内置math模块,提供大部分常用数学运算函数。

使用 math 模块

math 模块是标准库中的,所以不用安装,可以直接使用。使用方法是:

>>> import math
  • 1
  • 1

常用函数

ceil(x) 取顶
floor(x) 取底
fabs(x) 取绝对值
factorial (x) 阶乘
hypot(x,y) 计算sqrt(x*x+y*y)
pow(x,y) x的y次方
sqrt(x) 开平方
log(x)
log10(x)
trunc(x) 截断取整数部分
isnan (x) 判断是否NaN(not a number)
degrees (x) 弧度转角度
radians(x) 角度转弧度
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x) #例子:
a=math.atan(x) #计算x的反正切值
seta=math.degrees(a) #将弧度制表示的a转换成角度制表示的seta
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

Numpy模块

模块的导入

from numpy import array/mat/shape/*

mm=array([1,2,3])   //
ss=mat([1,2,3])
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

Numpy中,mat必须是2维的,但是array可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。 
在numpy中matrix的主要优势是:相对简单的乘法运算符号。例如,a和b是两个matrices,那么a*b,就是矩阵积。

a=mat([1,2,3]) 是矩阵,则 a.A 则转换成了数组,反之,a.M则转换成了矩阵

数组array

数组array的参数是列表,有

a=array([1,2,3])
b=array([[1,2,3],[4,5,6])
  • 1
  • 2
  • 1
  • 2

它有以下一些属性:

a.ndim      #秩,是数组轴的个数
a.shape #数组的维度
a.size #元素的总个数
a.dtype #一个用来描述数组中元素类型的对象
a.dtype.name #返回字符串形式的类型名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

常用的Numpy运算

取矩阵中的某一行 ss[1,:] 或该行的某两列 ss[1,0:2] 
将数组转换成矩阵 randMat=mat(random.rand(4,4)) 
矩阵求逆 randMat.I 
单位阵 eye(4) 
零矩阵 zeros((x,y)) 建立x行y列的零矩阵 
最大值和最小值 a.max(),a.min() ,而a.max(0) 表示按列选取每列的最大值 
最大/小元素的下标 a.argmax(),a.argmin()

#作为方法
x.sum() #所有元素相加
x.sum(axis=0) #按列相加
x.sum(axis=1) #按行相加
#作为函数
sum(a,axis=0) ss.mean()
mean(a,axis=0(或1)) #按列或行求均值 var(a)
var(a,axis=0(或1)) #按列或行求方差 std(a)
std(a,axis=0(或1)) #按列或行求标准差 ss.T或ss.transpose() #转置
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

shape的用法

  1. shape作为函数,可以读取矩阵的长度,它的输入参数可以是一个矩阵。例如:
shape(3):一个单独的数字,返回值为空
shape([1]):一维矩阵[1]返回值为(1L,)
shape([[1],[2]]) :二维矩阵[[1],[2]],返回两个值
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
  1. shape还可以作为矩阵的方法被调用,如
e=eye(3)
e.shape
>>(3L,3L)
e.shape[0]//读取第一维度的长度
>>3L
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

tile函数:重复某个数组

a=[0,1,2]
b=tile(a,2)
>>>b=([0,1,2,0,1,2])
b=tile(a,(2,1))
>>>b=([[0,1,2],
[0,1,2]])
b=tile(a,(1,2))
>>>b=([[0,1,2],[0,1,2]])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

range函数:构造等差数列

range(1,5):代表从1到5,不包含5:[1,2,3,4]
range(1,5,2):代表从1到5,间隔为2,不包含5:[1,3]
range(5):代表从0到5,不包含5:[0,1,2,3,4]
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

sort,sorted,argsort函数:排序

x.sort():

只可以应用于list对象,且是原地排序,排序过后list发生改变。

x.argsort():

得到矩阵每行的升序排序

sorted函数

排序并生成新的容器

一. 如果是普通的列表,可以直接使用sorted,如

a=[1,4,2,3,7]
b=sorted(a)
  • 1
  • 2
  • 1
  • 2

二. 如果是由元祖构成的元祖列表,就比较复杂,假设有

L=[('b',2),('a',1),('c',3)]
  • 1
  • 1

有两种写法或格式

  1. cmp格式
sorted(L,cmp=lambda x,y:cmp(x[1],y[1])
  • 1
  • 1
  1. key格式
sorted(L,key=lambda x:x[1])
  • 1
  • 1

其中还有个reverse可选项,reverse=True 则输出倒序,reverse=False 则输出正序。

三. 如果是字典,那么格式也略复杂 
假设有dic={'a':31,'bc':52,'c':3,'33':56} 
在python 3中,可以写成

sorted(dic.items(),key=lambda d:d[1],reserve=False)
  • 1
  • 1

其中,dic.items 返回字典键值对的元祖集合set 
还可以写成

sorted(dic.items(),key=operator.itemgetter(1),reserve=False)
  • 1
  • 1

其中,operator.itemgetter() 函数可以获取对象的某些维的数据

array的形状操作

a.ravel()   #展平成一维数组,a.flatten() 与之类似
a.reshape(m,n) #返回一个新数组,但原数组本身不变
a.resize(m,n) #返回一个新数组的同时也改变原数组本身
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

其他通用函数或方法

a.copy()    #对元素进行复制
c=sqrt(a) #计算元素的平方根
c=exp(a)
c=abs(a)
c=add(a,b) #a和b对应元素相加
c=subtract(a,b) #a和b对应元素相减
c=multiply(a,b) #a和b对应元素相乘
c=divide(a,b) #a和b对应元素相除
nonzero(a) #返回a中所有不为零的元素的下标位置
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

对array和matrix而言,(a>3)或(a==3) 返回一个同类型的布尔值 
例如:

a=array([1,2,3])
b=(a==2) >>>b=array([False,True,False])
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

Numpy中的线性代数子库linalg

linalg中包含了许多线性代数的方法

linalg.det(a)   #求a的行列式
linalg.inv(a) #求a的逆矩阵