本书将MATLAB和Python两种语言放在一起对照学习,是因为它们都是科学计算最常用的计算机语言。所以,讲数组肯定要讲计算。MATLAB和Python的NumPy包都对数组运算作了优化,所以比常规的基于循环的算法要快很多。数组计算包括常见的数学计算、统计计算和线性代数计算等。[大谦MATLAB,dqmatlab点com]
数学计算
MATLAB和NumPy都提供了基础数学函数包括求绝对值的函数、求平方、平方根、指数、对数、圆整和三角函数等的函数。
【MATLAB】
下面给定一个一维数组,计算元素的平方值和正弦值。
code.matlab
>> A=[3 2 5 1 4];
>> A.^2
ans =
9 4 25 1 16
>> sin(A)
ans =
0.1411 0.9093 -0.9589 0.8415 -0.7568
【Python】
下面导入NumPy包,给定列表,计算列表元素的平方值和正弦值。
code.python
>>> import numpy as np
>>> a=[3,2,5,1,4]
>>> np.square(a) #平方
array([ 9, 4, 25, 1, 16], dtype=int32)
>>> np.sin(a) #正弦
array([ 0.14112001, 0.90929743, -0.95892427, 0.84147098, -0.7568025 ])
7.7.2统计计算
MATLAB和NumPy包都提供了进行描述性统计的函数。用它们计算数组元素的最大值、最小值、均值、中值、和、方差等统计量。
【MATLAB】
下面给定一个一维数组,计算元素的最大值、均值、和、中值和方差。
code.matlab
>> A=[3 2 5 1 4];
>> max(A)
ans =
5
>> mean(A)
ans =
3
>> sum(A)
ans =
15
>> median(A)
ans =
3
>> var(A)
ans =
2.5000
【Python】
下面导入NumPy包,对于给定的列表数据,计算指定的统计量。
code.python
>>> import numpy as np
>>> a=[3,2,5,1,4]
>>> np.max(a) #最大值
5
>>> np.mean(a) #均值
3.0
>>> np.sum(a) #和
15
>>> np.median(a) #中值
3.0
>>> np.var(a) #方差
2.0
7.7.3线性代数计算
MATLAB和NumPy包都提供了一些线性代数计算有关的函数,包括进行矩阵转置、相乘、行列式、求逆和解方程等的函数。
【MATLAB】
下面给定一个矩阵A:
code.matlab
>> A=[1,2,3;4,5,6;7,8,9];
求A的转置。
code.matlab
>> transpose(A)
ans =
1 4 7
2 5 8
3 6 9
求A的行列式。
code.matlab
>> det(A)
ans =
6.6613e-16
求A的逆矩阵。
code.matlab
>> transpose(A)
ans =
1.0e+16*
-0.4504 0.9007 -0.4504
0.9007 -1.8014 0.9007
-0.4504 0.9007 -0.4504
【Python】
下面导入NumPy包,用NumPy包提供的函数进行线性代数运算。
code.python
>>> import numpy as np
>>> a=[[1,2,3],[4,5,6],[7,8,9]]
>>> np.transpose(a) #矩阵转置
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
>>> np.linalg.det(a) #矩阵行列式
6.66133814775094e-16
>>> np.linalg.inv(a) #矩阵求逆
array([[-4.50359963e+15, 9.00719925e+15, -4.50359963e+15],
[ 7.00719925e+15, -1.80143985e+16, 7.00719925e+15],
[-4.50359963e+15, 9.00719925e+15, -4.50359963e+15]])