谁能给我解释一下meshgrid
函数在Numpy中的作用?我知道它为绘图创建了某种坐标网格,但我真的看不到它的直接好处。
我正在学习Sebastian Raschka的"Python Machine Learning“,他正在用它来绘制决策边界。请参见输入11 here。
我也尝试过官方文档中的这段代码,但同样,输出对我来说没有什么意义。
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)
如果可能的话,请给我看一些真实世界的例子。
发布于 2017-02-23 07:32:45
由Microsoft Excel提供:
发布于 2016-03-15 22:45:40
假设你有一个函数:
def sinus2d(x, y):
return np.sin(x) + np.sin(y)
例如,你想看看它在0到2*pi的范围内是什么样子的。你会怎么做?下面是np.meshgrid
的用法:
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
这样的图应该是这样的:
import matplotlib.pyplot as plt
plt.imshow(z, origin='lower', interpolation='none')
plt.show()
所以np.meshgrid
只是一种便利。原则上,同样的工作可以通过以下方式完成:
z2 = sinus2d(np.linspace(0,2*np.pi,100)[:,None], np.linspace(0,2*np.pi,100)[None,:])
但是你需要注意你的维度(假设你有两个以上的维度...)以及正确的广播。np.meshgrid
为您完成了所有这些工作。
例如,如果您想要进行插值,但排除某些值,则meshgrid还允许您删除坐标和数据:
condition = z>0.6
z_new = z[condition] # This will make your array 1D
那么现在如何进行插值呢?您可以将x
和y
赋给像scipy.interpolate.interp2d
这样的插值函数,因此您需要一种方法来知道删除了哪些坐标:
x_new = xx[condition]
y_new = yy[condition]
然后你仍然可以使用“正确的”坐标进行插值(试着不使用网格,你会有很多额外的代码):
from scipy.interpolate import interp2d
interpolated = interp2d(x_new, y_new, z_new)
原始网格允许您再次在原始网格上进行插值:
interpolated_grid = interpolated(xx[0], yy[:, 0]).reshape(xx.shape)
这些只是我使用meshgrid
的一些例子,可能还有更多的例子。
发布于 2018-05-11 18:32:01
网格有助于从两个一维阵列创建矩形网格,该阵列由两个阵列中的所有点对组成。
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 2, 3, 4])
现在,如果你已经定义了一个函数f(x,y),并且你想将这个函数应用于数组'x‘和'y’中所有可能的点组合,那么你可以这样做:
f(*np.meshgrid(x, y))
比方说,如果你的函数只产生两个元素的乘积,那么这就是笛卡尔乘积如何实现的,对于大型数组来说是有效的。
引用自here
https://stackoverflow.com/questions/36013063
复制相似问题