面向数组的编程
面向数组的编程是以向量化代替使用繁杂的Loop循环。
下面是一个例子,我们要对一个普通网格的数值计算$sqrt(x^2 + y^2)$
1 | import numpy as np |
meshgrid 的使用方法:
meshgrid函数用两个坐标轴上的点在平面上画格。[X,Y] = meshgrid(x,y) 将向量x和y定义的区域转换成矩阵X和Y,这两个矩阵可以用来表示mesh和surf的三维空间点以及两个变量的赋值。其中矩阵X的行向量是向量x的简单复制,而矩阵Y的列向量是向量y的简单复制。
1 | xs, ys = np.meshgrid(points, points) #因为参数相同,所以xs和ys也是相同的 |
1 | ys |
array([[-5. , -5. , -5. , ..., -5. , -5. , -5. ],
[-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99],
[-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98],
...,
[ 4.97, 4.97, 4.97, ..., 4.97, 4.97, 4.97],
[ 4.98, 4.98, 4.98, ..., 4.98, 4.98, 4.98],
[ 4.99, 4.99, 4.99, ..., 4.99, 4.99, 4.99]])
1 | z = np.sqrt(xs ** 2 + ys ** 2) |
1 | z |
array([[ 7.07106781, 7.06400028, 7.05693985, ..., 7.04988652,
7.05693985, 7.06400028],
[ 7.06400028, 7.05692568, 7.04985815, ..., 7.04279774,
7.04985815, 7.05692568],
[ 7.05693985, 7.04985815, 7.04278354, ..., 7.03571603,
7.04278354, 7.04985815],
...,
[ 7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 ,
7.03571603, 7.04279774],
[ 7.05693985, 7.04985815, 7.04278354, ..., 7.03571603,
7.04278354, 7.04985815],
[ 7.06400028, 7.05692568, 7.04985815, ..., 7.04279774,
7.04985815, 7.05692568]])
可以将该矩阵视觉化
1 | import matplotlib.pyplot as plt |
<matplotlib.colorbar.Colorbar at 0x81ffbf0>
1 | plt.title("Image plot of $\sqrt{x^2 + y^2}$ for a grid of values") |
Text(0.5,1,'Image plot of $\\sqrt{x^2 + y^2}$ for a grid of values')
1 | pylab.show() #这样才能显示图像 |