数组的计算

本书将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]])