大家好,又见面了,我是你们的朋友全栈君。
官方解释:
np.meshgrid(*xi, **kwargs)
Return coordinate matrices from coordinate vectors. 从坐标向量中返回坐标矩阵
不够直观
直观的例子
二维坐标系中,X轴可以取三个值 1,2,3, Y轴可以取三个值 7,8, 请问可以获得多少个点的坐标?
显而易见是 6 个:
(1, 7) (2, 7) (3, 7)
(1, 8) (2, 8) (3, 8)
np.meshgrid()
就是干这个的!
#coding:utf-8
import numpy as np
# 坐标向量
a = np.array([1,2,3])
# 坐标向量
b = np.array([7,8])
# 从坐标向量中返回坐标矩阵
# 返回list,有两个元素,第一个元素是X轴的取值,第二个元素是Y轴的取值
res = np.meshgrid(a,b)
#返回结果: [array([ [1,2,3] [1,2,3] ]), array([ [7,7,7] [8,8,8] ])]
同理还可以生成更高维度的坐标矩阵
本文的目的是记录 meshgrid()
的理解过程:
step1. 通过一个示例引入创建网格点矩阵;
step2. 基于步骤1,说明 meshgrid()
的作用;
step3. 详细解读 meshgrid()
的官网定义;
说明:step1 和 2 的数据都是基于笛卡尔坐标系的矩阵,目的是为了方便讨论。
step1. 通过一个示例引入创建网格点矩阵;
示例1,创建一个 2 行 3 列的网格点矩阵。
import numpy as np
import matplotlib.pyplot as plt
X = np.array([[0, 0.5, 1],[0, 0.5, 1]])
print("X的维度:{},shape:{}".format(X.ndim, X.shape))
Y = np.array([[0, 0, 0],[1, 1, 1]])
print("Y的维度:{},shape:{}".format(Y.ndim, Y.shape))
plt.plot(X, Y, 'o--')
plt.grid(True)
plt.show()
X矩阵是: [[0. 0.5 1. ], [0. 0.5 1. ]]
Y矩阵是: [[0 0 0], [1 1 1]]
step2. meshgrid()
的作用;
当要描绘的 矩阵网格点的数据量小的时候,可以用上述方法构造网格点坐标数据;
但是如果是一个 (256, 100) 的整数矩阵网格,要怎样构造数据呢?
方法1 : 将 x 轴上的 100 个整数点组成的行向量,重复 256 次,构成 shape(256,100)
的 X 矩阵;将 y 轴上的 256 个整数点组成列向量, 重复 100 次构成 shape(256,100)
的 Y 矩阵
显然方法1 的数据构造过程很繁琐, 也不方便调用, 那么有没有更好的办法呢?
of course!!! 那么 meshgrid()
就显示出它的作用了
使用 meshgrid
方法,你只需要构造一个表示 x
轴上的坐标的向量和一个表示 y
轴上的坐标的向量; 然后作为参数给到 meshgrid()
, 该函数就会返回相应维度的两个矩阵;
例如,你想构造一个 2 行 3 列的矩阵网格点, 那么 x
生成一个 shape(3,)
的向量, y
生成一个 shape(2,)
的向量, 将 x
, y
传入 meshgrid()
, 最后返回的 X , Y 矩阵的 shape(2,3)
示例2,使用 meshgrid()
生成 step1 中的网格点矩阵
x = np.array([0, 0.5, 1])
y = np.array([0,1])
xv,yv = np.meshgrid(x, y)
print("xv的维度:{},shape:{}".format(xv.ndim, xv.shape))
print("yv的维度:{},shape:{}".format(yv.ndim, yv.shape))
plt.plot(xv, yv, 'o--')
plt.grid(True)
plt.show()
示例3,生成一个20行30列的网格点矩阵
x = np.linspace(0,500,30)
print("x的维度:{},shape:{}".format(x.ndim, x.shape))
print(x)
y = np.linspace(0,500,20)
print("y的维度:{},shape:{}".format(y.ndim, y.shape))
print(y)
xv,yv = np.meshgrid(x, y)
print("xv的维度:{},shape:{}".format(xv.ndim, xv.shape))
print("yv的维度:{},shape:{}".format(yv.ndim, yv.shape))
plt.plot(xv, yv, '.')
plt.grid(True)
plt.show()
step3. 详细解读 meshgrid()
的官网定义;
numpy.meshgrid(*xi, **kwargs)
Return coordinate matrices from coordinate vectors.
根据输入的坐标向量生成对应的坐标矩阵
Parameters:
x1, x2,…, xn : array_like
1-D arrays representing the coordinates of a grid.
indexing : {‘xy’, ‘ij’}, optional
Cartesian (‘xy’, default) or matrix (‘ij’) indexing of output. See Notes for more details.
sparse : bool, optional
If True a sparse grid is returned in order to conserve memory. Default is False.
copy : bool, optional
If False, a view into the original arrays are returned in order to conserve memory.
Default is True. Please note that sparse=False, copy=False will likely return non-contiguous arrays.
Furthermore, more than one element of a broadcast array may refer to a single memory location.
If you need to write to the arrays, make copies first.
Returns:
X1, X2,…, XN : ndarray
For vectors x1, x2,…, ‘xn’ with lengths Ni=len(xi) ,
return (N1, N2, N3,…Nn) shaped arrays if indexing=’ij’
or (N2, N1, N3,…Nn) shaped arrays if indexing=’xy’
with the elements of xi repeated to fill the matrix along the first dimension for x1, the second for x2 and so on.
针对 indexing
参数的说明:
indexing
只是影响 meshgrid()
函数返回的矩阵的表示形式,但并不影响坐标点
x = np.array([0, 0.5, 1])
y = np.array([0,1])
xv,yv = np.meshgrid(x, y)
print("xv的维度:{},shape:{}".format(xv.ndim, xv.shape))
print("yv的维度:{},shape:{}".format(yv.ndim, yv.shape))
print(xv)
print(yv)
plt.plot(xv, yv, 'o--')
plt.grid(True)
plt.show()
x = np.array([0, 0.5, 1])
y = np.array([0,1])
xv,yv = np.meshgrid(x, y,indexing='ij')
print("xv的维度:{},shape:{}".format(xv.ndim, xv.shape))
print("yv的维度:{},shape:{}".format(yv.ndim, yv.shape))
print(xv)
print(yv)
plt.plot(xv, yv, 'o--')
plt.grid(True)
plt.show()
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132138.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...