首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python / NumPy中,网格的作用是什么?

在Python / NumPy中,网格的作用是什么?
EN

Stack Overflow用户
提问于 2016-03-15 21:43:44
回答 4查看 256.6K关注 0票数 425

谁能给我解释一下meshgrid函数在Numpy中的作用?我知道它为绘图创建了某种坐标网格,但我真的看不到它的直接好处。

我正在学习Sebastian Raschka的"Python Machine Learning“,他正在用它来绘制决策边界。请参见输入11 here

我也尝试过官方文档中的这段代码,但同样,输出对我来说没有什么意义。

代码语言:javascript
复制
x = np.arange(-5, 5, 1)
y = np.arange(-5, 5, 1)
xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
h = plt.contourf(x,y,z)

如果可能的话,请给我看一些真实世界的例子。

EN

回答 4

Stack Overflow用户

发布于 2017-02-23 07:32:45

由Microsoft Excel提供:

票数 328
EN

Stack Overflow用户

发布于 2016-03-15 22:45:40

假设你有一个函数:

代码语言:javascript
复制
def sinus2d(x, y):
    return np.sin(x) + np.sin(y)

例如,你想看看它在0到2*pi的范围内是什么样子的。你会怎么做?下面是np.meshgrid的用法:

代码语言:javascript
复制
xx, yy = np.meshgrid(np.linspace(0,2*np.pi,100), np.linspace(0,2*np.pi,100))
z = sinus2d(xx, yy) # Create the image on this grid

这样的图应该是这样的:

代码语言:javascript
复制
import matplotlib.pyplot as plt
plt.imshow(z, origin='lower', interpolation='none')
plt.show()

所以np.meshgrid只是一种便利。原则上,同样的工作可以通过以下方式完成:

代码语言:javascript
复制
z2 = sinus2d(np.linspace(0,2*np.pi,100)[:,None], np.linspace(0,2*np.pi,100)[None,:])

但是你需要注意你的维度(假设你有两个以上的维度...)以及正确的广播。np.meshgrid为您完成了所有这些工作。

例如,如果您想要进行插值,但排除某些值,则meshgrid还允许您删除坐标和数据:

代码语言:javascript
复制
condition = z>0.6
z_new = z[condition] # This will make your array 1D

那么现在如何进行插值呢?您可以将xy赋给像scipy.interpolate.interp2d这样的插值函数,因此您需要一种方法来知道删除了哪些坐标:

代码语言:javascript
复制
x_new = xx[condition]
y_new = yy[condition]

然后你仍然可以使用“正确的”坐标进行插值(试着不使用网格,你会有很多额外的代码):

代码语言:javascript
复制
from scipy.interpolate import interp2d
interpolated = interp2d(x_new, y_new, z_new)

原始网格允许您再次在原始网格上进行插值:

代码语言:javascript
复制
interpolated_grid = interpolated(xx[0], yy[:, 0]).reshape(xx.shape)

这些只是我使用meshgrid的一些例子,可能还有更多的例子。

票数 47
EN

Stack Overflow用户

发布于 2018-05-11 18:32:01

网格有助于从两个一维阵列创建矩形网格,该阵列由两个阵列中的所有点对组成。

代码语言:javascript
复制
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 2, 3, 4])

现在,如果你已经定义了一个函数f(x,y),并且你想将这个函数应用于数组'x‘和'y’中所有可能的点组合,那么你可以这样做:

代码语言:javascript
复制
f(*np.meshgrid(x, y))

比方说,如果你的函数只产生两个元素的乘积,那么这就是笛卡尔乘积如何实现的,对于大型数组来说是有效的。

引用自here

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36013063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档