python教程,如何理解numpy里meshgrid网格生成函数?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
最近要更新的python
文章都是和画图有关系的,画图的时候都有些坐标点,这些坐标点除了手工定义外,还可以通过np.meshgrid()
来批量生成。这就是本文的主要内容:np.meshgrid()
函数的使用问题。它可以生成一系列可以组成网格的坐标点。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码经验总结。本文测试环境:win10
,python@3.11.0
,numpy@1.24.2
,matplotlib@3.7.1
。
坐标值
水平面上的坐标都是由x,y
两个坐标组成的,所以本段代码准备这两个坐标轴。坐标点的生成,是根据需求来生成的。所以,不要盲目的抄袭本段内容,请根据实际需求更改代码。
import numpy as np
x = np.arange(0,12,3) # [0 3 6 9]
y = np.linspace(0,12,3) # [0 6 12]
返回值:
[0 3 6 9]
[ 0. 6. 12.]
本文内容使用下面的文章的等差数列的生成方案:
网格坐标【本文主体】
坐标点并非单独的几个点(网格边缘的几个点),而是相互交织的网格坐标,这里使用np.meshgrid()
来生成网格坐标。
xx, yy = np.meshgrid(x, y)
返回:
[[0 3 6 9]
[0 3 6 9]
[0 3 6 9]]
[[ 0. 0. 0. 0.]
[ 6. 6. 6. 6.]
[12. 12. 12. 12.]]
可以看到:
- 从x到xx,是把x{全体数据}在竖直方向上复制{y的行数}次。
- 从y到yy,是把y先变成竖排,然后{单个值}在x的方向上复制{x的列数}次。
直观感受散点分布
下面使用plot
生成散点图的方式,来直观的画出这些点,并不是主体内容。仅仅是个直观感受的内容。代码如下:
import matplotlib.pyplot as plt
plt.scatter(xx, yy, color="r", marker="*")
plt.show()
参考文章:
如果交换xx
和yy
,可以得到另外一个散点分布图,以加强对比感知。
import matplotlib.pyplot as plt
plt.scatter(yy, xx, color="b", marker="*")
plt.show()
值得说明的是:网格图上显示出来的横纵坐标文字值,虽然依据是xx
和yy
。但是,并不是完全按照其分布的。
对比zip(x,y)
和zip()
缝合函数也是有一定的区别的,对比一下:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 12, 3)
y = np.linspace(0, 12, 3)
xx, yy = np.meshgrid(x, y)
print(len(xx),len(yy),len(list(zip(x,y)))) # 3 3 3
print(xx)
print(yy)
print(list(zip(x,y)))
"""
[[0 3 6 9]
[0 3 6 9]
[0 3 6 9]]
[[ 0. 0. 0. 0.]
[ 6. 6. 6. 6.]
[12. 12. 12. 12.]]
[(0, 0.0), (3, 6.0), (6, 12.0)]
"""
很显然,meshgrid()
得到的是网格12个点,zip()
得到的是其中的斜线上的三个点。
结束语
苏南大叔的文章可以转载,但是请保留“苏南大叔”的基本人设,请保留文章链接。谢谢。更多python
文章请参考:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。