使用python进行一些数学计算

1.计算两向量间的点积
import numpy as np

# 构建向量
a=np.array([-2,2])
b=np.array([2,2])

# 计算点积
ab_1=np.inner(a,b) # =a1*b1+a2*b2
# 根据夹角余弦计算点积 (近似为0)
ab_2=np.linalg.norm(a)*np.linalg.norm(b)*np.cos(np.pi/2)

print(ab_1,ab_2)
# results
0 4.898587196589414e-16
2.计算两向量间的叉积
import numpy as np
# 构建向量
a=np.array([1,2,1])
b=np.array([1,-1,1])

# 计算叉积
a_b=np.cross(a,b)

print(a_b)
[ 3  0 -3]
3.计算行列式
import numpy as np
# 定义两个矩阵
a=np.mat('1 2;3 4')
b=np.mat('2 2 0;1 0 1;0 1 1')
# 计算两个行列式
det_a=np.linalg.det(a)
det_b=np.linalg.det(b)

print('a={0}\n D(a)={1}'.format(a,np.round(det_a)))
print('b={0}\n D(b)={1}'.format(b,np.round(det_b)))
a=[[1 2]
 [3 4]]
 D(a)=-2.0
b=[[2 2 0]
 [1 0 1]
 [0 1 1]]
 D(b)=-4.0
4.矩阵访问和运算
<1>矩阵声明
import numpy as np
a1=np.random.random((4,3))
a2=np.random.randint(1,11,(4,3))
a3=np.ones((4,3))
a4=np.zeros((4,3))
a5=np.mat(np.arange(2,25,2)).reshape(4,3)
a6=np.mat('1 2 3;4 5 6;7 8 9;10 11 12')

print('a1=\n{}'.format(a1))
print('a2=\n{}'.format(a2))
print('a3=\n{}'.format(a3))
print('a4=\n{}'.format(a4))
print('a5=\n{}'.format(a5))
print('a6=\n{}'.format(a6))
a1=
[[0.86427132 0.11123374 0.28509846]
 [0.79472244 0.20047733 0.7522389 ]
 [0.01712534 0.25075339 0.46870283]
 [0.75457102 0.15000278 0.13519241]]
a2=
[[10  4  1]
 [ 4  9  4]
 [ 4  8 10]
 [ 2  2  9]]
a3=
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
a4=
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
a5=
[[ 2  4  6]
 [ 8 10 12]
 [14 16 18]
 [20 22 24]]
a6=
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
<2>矩阵访问
import numpy as np 
a=np.mat('1 2 3;4 5 6;7 8 9;10 11 12')
print('a=\n{}'.format(a))
# 获取矩阵的行列数
m,n=np.shape(a)
print('a is a %d x %d matrix'%(m,n))

a_11,a_32=a[0,0],a[2,1]
print('a11=%d,a32=%d'%(a_11,a_32))
a_r2=a[1]
print('the second row in a is{}'.format(a_r2))
a_c2=a[:,1]
print('the second column in a is \n{}'.format(a_c2))
a=
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
a is a 4 x 3 matrix
a11=1,a32=8
the second row in a is[[4 5 6]]
the second column in a is 
[[ 2]
 [ 5]
 [ 8]
 [11]]
<3>矩阵运算
import numpy as np 
a=np.mat('1 2 3;4 5 6;7 8 9;10 11 12')
b=np.ones((4,3))
print('a=\n{}\n b=\n{}'.format(a,b))
# 矩阵加减
d1=np.add(a,b)
d2=np.subtract(a,b)
print('a+b=\n{}'.format(d1))
print('a-n=\n{}'.format(d2))
# 矩阵数乘
d3=np.multiply(a,2)
print('2a=\n{}'.format(d3))
# 矩阵乘法
c=np.ones((3,4))
d4=np.dot(b,c)
print('b*c=\n{}'.format(d4))
# 矩阵转置
d5=np.transpose(a)
print('a^T=\n{}'.format(d5))
a=
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
 b=
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
a+b=
[[ 2.  3.  4.]
 [ 5.  6.  7.]
 [ 8.  9. 10.]
 [11. 12. 13.]]
a-n=
[[ 0.  1.  2.]
 [ 3.  4.  5.]
 [ 6.  7.  8.]
 [ 9. 10. 11.]]
2a=
[[ 2  4  6]
 [ 8 10 12]
 [14 16 18]
 [20 22 24]]
b*c=
[[3. 3. 3. 3.]
 [3. 3. 3. 3.]
 [3. 3. 3. 3.]
 [3. 3. 3. 3.]]
a^T=
[[ 1  4  7 10]
 [ 2  5  8 11]
 [ 3  6  9 12]]
5.矩阵求逆

b=np.linalg.inv(a)

import numpy as np 
E=np.eye(4,4)
print('E=\n{}'.format(E))
a=np.mat('1 2;3 4')
# a的逆矩阵
b=np.linalg.inv(a)
print('a=\n{}'.format(a),'\n the inverse of a is \n{}'.format(b))
# 矩阵a和它的逆矩阵b相乘
c=np.around(np.dot(a,b),decimals=1) #decimals用来决定精度
print('a*a^-1 = \n{}'.format(c))
E=
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]
a=
[[1 2]
 [3 4]] 
 the inverse of a is 
[[-2.   1. ]
 [ 1.5 -0.5]]
a*a^-1 = 
[[1. 0.]
 [0. 1.]]
6.求矩阵的秩

r=np.linalg.matrix_rank(A)

7.求距离
import numpy as np 
x1=[1,3]
x2=[4,9]
np_x1=np.array(x1)
np_x2=np.array(x2)
# 欧几里得距离 6.708203932499369
d1=np.linalg.norm(np_x1-np_x2)
print(d1)
# 曼哈顿距离 9
d2=np.sum(np.abs(np_x1-np_x2))
print(d2)
# 切比雪夫距离 6
d3=np.max(np.abs(np_x1-np_x2))
print(d3)
8.求导
import numpy as np 
import sympy as sp 
# 定义变量x,表示对x求导
x=sp.symbols('x',real=True)
# y=arctan x
y=sp.atan(x)
d1=sp.diff(y,x)
print('(arctanx)\'={}'.format(d1))
# (arctanx)'=1/(x**2 + 1)

# y=ln sec x
y=sp.ln(sp.sec(x))
d2=sp.diff(y,x)
print('(ln secx)\'={}'.format(d2))
# (ln secx)'=tan(x)

注:python中print %用法
print('D %d= %s' % (n,D)),表示将n代入到%d位置,将D字符化后代入到%s位置。

9.积分
import numpy as np 
import sympy as sp 
x=sp.symbols('x')
# 不定积分
fx1=x**2
fx2=sp.cos(x)
fx3=1/(1+x**2)
r1=sp.integrate(fx1,(x))
r2=sp.integrate(fx2,(x))
r3=sp.integrate(fx3,(x))

print(r1) # x**3/3
print(r2) # sin(x)
print(r3) # atan(x)

# 定积分
fx=sp.sqrt(4-x**2)/2
r=sp.integrate(fx,(x,-2,2)) #积分范围为-2~2
print(r) # pi

猜你喜欢

转载自blog.csdn.net/Nismilesucc/article/details/112986830