meshgrid在这个情节中做了什么?

时间:2018-04-13 11:31:26

标签: python matplotlib

我试图用我自己的模型复制this SKLearn示例代码中的情节。我不太了解以下几行的内容,以及如何将它们修改为我自己的模型:

# plot the line, the samples, and the nearest vectors to the plane
xx, yy = np.meshgrid(np.linspace(-5, 5, 50), np.linspace(-5, 5, 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]) #this line created a runtime error with my own input
Z = Z.reshape(xx.shape)

meshgrid做了什么(我已经检查过官方描述,但我无法理解它 - 你能用外行人的条款来解释)吗?好的,它会创建一个坐标矩阵,但为什么我们需要呢?我如何为自己的数据设置它?如果我只更改此代码中的输入,则会与IndexError: list index out of range(上面标记的行)崩溃。

1 个答案:

答案 0 :(得分:0)

在代码段中,XY变量可以取-5到5之间的任何值。此范围分为50个步骤,因此您需要在50x50中评估clf.decision_function获取Z的网格。您希望Z[0][0] = clf.decision_function(-5, -5)Z[-1][-1] = clf.decision_function(5, 5)np.meshgrid生成可帮助您实现这一目标的数组。您需要的是拥有每一对XY值。 xx是一个数组,其行数与Y值一样多,列数与X一样多,每行只是X的可能值列表。相反,yy具有相同的维度,但此处每列都是可能的Y值列表。如下所示:

xx:

[[   0, ...,  50 ],
 [   0, ...,  50 ],
 ...,
 [   0, ...,  50 ]]

yy:

[[   0,   0, ...,   0 ],
 ...,
 [  50,  50, ...,  50 ]]

如果您仔细观察,那么从xxyy获取每对相应的值都不会为您提供XY值的所有可能组合。因此,clf.decision_function(np.c_[xx.ravel(), yy.ravel()])会使用两列矩阵评估clf.decision_function,其中每一行都是XY值的不同组合。

最后,将Z重塑为xx的形状(请记住,这与yy形状相同,<number of Y values> × <number of X values>将为您提供一个矩阵Z[i][j] = clf.decision_function(<X j-th value>, <Y i-th value>) 1}}。不,我没有弄错,Z的第一个维度引用Y值索引,第二个维度引用X值索引。这是因为np.meshgrid模拟MATLAB's meshgrid的行为,其基本原理是此函数经常用于绘制2D函数,其中X应该是水平轴而{{1}垂直轴,但是当绘制矩阵时,我们期望看到水平维度中的行和垂直维度中的列,因此在某个点交换轴变得必要。{{3} }还支持Y可选参数,可以将其设置为indexing以使'ij'保留在第一维中,X保留在第二维中,类似于np.meshgrid