NumPy教程-numpy.meshgrid()在Python中的使用
Python的numpy模块提供了meshgrid()函数,用于根据给定的表示矩阵索引或笛卡尔索引的一维数组创建一个矩形网格。MATLAB在一定程度上启发了meshgrid()函数。通过坐标向量,meshgrid()函数返回坐标矩阵。
在上面的图中,x轴从-5到5,y轴从-5到5。因此,图中标记了共计121个点,每个点都有x坐标和y坐标。对于任何与x轴平行的直线,标记点的x坐标分别为-5、-4、-3、-2、-1、0、1、2、3、4和5。另一方面,对于任何与y轴平行的直线,从下到上标记点的y坐标分别为-5、-4、-3、-2、-1、0、1、2、3、4和5。
语法
numpy.meshgrid(*xi, **kwargs)
参数
x1, x2,…, xn : array_like
这个参数定义了一个一维数组,表示网格的坐标。
indexing: {'xy', 'ij'}(可选)
这是一个可选的参数,定义了输出的笛卡尔'xy'(默认)或矩阵('ij')索引。
sparse: bool(可选)
这个参数也是可选的。如果我们需要一个稀疏网格以节省内存,就需要将这个参数设置为True。默认情况下,它设置为False。
copy: bool(可选)
这个可选参数的目的是返回原始数组的副本,以节省内存。默认情况下,它设置为False。
如果sparse和copy参数都设置为False,那么它将返回非连续的数组。此外,广播数组的多个元素可能会引用单个内存位置。如果我们需要写入数组,则必须首先进行复制。
返回值
X1, X2, …, Xn
从坐标向量返回的坐标长度。
示例 1:
import numpy as np
na, nb = (5, 3)
a = np.linspace(1, 2, na)
b = np.linspace(1, 2, nb)
xa, xb = np.meshgrid(a, b)
xa
xb
输出:
array([[1. , 1.25, 1.5 , 1.75, 2. ],
[1. , 1.25, 1.5 , 1.75, 2. ],
[1. , 1.25, 1.5 , 1.75, 2. ]])
array([[1. , 1. , 1. , 1. , 1. ],
[1.5, 1.5, 1.5, 1.5, 1.5],
[2. , 2. , 2. , 2. , 2. ]])
在上面的代码中
- 我们使用别名np导入了numpy模块。
- 我们创建了两个变量,na和nb,并分别赋值为5和3。
- 我们使用linspace()函数创建了两个数组,a和b。
- 然后,我们声明了变量'xa'和'xb',并将meshgrid()的返回值赋给它们。
- 我们在函数中传递了数组'a'和'b'。
- 最后,我们尝试打印变量'xa'和'xb'。
输出显示了两个数组,它们包含来自坐标向量的坐标长度。
示例 2:
import numpy as np
na, nb = (5, 3)
a = np.linspace(1, 2, na)
b = np.linspace(1, 2, nb)
xa, xb = np.meshgrid(a, b, sparse=True)
xa
xb
输出:
array([[1. , 1.25, 1.5 , 1.75, 2. ]])
array([[1. ],
[1.5],
[2. ]])
示例 3:
import numpy as np
import matplotlib.pyplot as plt
a = np.arange(-10, 10, 0.1)
b = np.arange(-10, 10, 0.1)
xa, xb = np.meshgrid(a, b, sparse=True)
z = np.sin(xa**2 + xb**2) / (xa**2 + xb**2)
h = plt.contourf(a,b,z)
plt.show()
输出:
示例 4:
import numpy as np
import matplotlib.pyplot as plt
a = np.linspace(-5, 5, 5)
b = np.linspace(-5, 5, 11)
random_data = np.random.random((11, 5))
xa, xb = np.meshgrid(a, b)
plt.contourf(xa, xb, random_data, cmap = 'jet')
plt.colorbar()
plt.show()
输出:
示例 5:
import numpy as np
import matplotlib.pyplot as plt
a = np.linspace(-5, 5, 5)
b = np.linspace(-5, 5, 11)
random_data = np.random.random((11, 5))
xa, xb = np.meshgrid(a, b)
sine = (np.sin(xa**2 + xb**2))/(xa**2 + xb**2)
plt.contourf(xa, xb, sine, cmap = 'jet')
plt.colorbar()
plt.show()
输出: