如何在 Matplotlib 中使用带有大型数组的网格网格?

Posted

技术标签:

【中文标题】如何在 Matplotlib 中使用带有大型数组的网格网格?【英文标题】:How to use meshgrid with large arrays in Matplotlib? 【发布时间】:2015-08-24 10:31:56 【问题描述】:

我已经在 sklearn 的 100x85 数组上训练了一个机器学习二进制分类器。我希望能够改变数组中的 2 个特征,比如第 0 列和第 1 列,并生成等高线或曲面图,显示属于一个类别的预测概率如何在整个曲面上变化。

在我看来,我会使用类似以下的东西:

X = 100 x 85 用于训练集的数据数组 clf = 训练有素的 2 类分类器

x = np.array(X)
y = np.array(X)

x[:,0] = np.linspace(0, 100, 100)
y[:,1] = np.linspace(0, 100, 100)
xx, yy = meshgrid(x,y)

下一步是使用

clf.predict_proba(<input arrays>)

接着是绘图,但使用 meshgrid 会导致两个 8500x8500 矩阵无法在我的分类器中使用。

如何在网格中的每个点获得必要的 100x85 向量,以便在我的分类器中使用 pred_proba?

感谢您提供的任何帮助。

【问题讨论】:

np.meshgrid 需要 2 个或更多 1D 输入数组。你给它提供了 2x 2D 数组,这些数组正在被展平,这就是为什么你会为 xxyy 获得 8500x8500 大小的数组。 【参考方案1】:

正如@wflynny 上面所说,你需要给np.meshgrid 两个一维数组。我们可以使用X.shape 来创建您的xy 数组,如下所示:

X=np.zeros((100,85)) # just to get the right shape here

print X.shape
# (100, 85)

x=np.arange(X.shape[0])
y=np.arange(X.shape[1])

print x.shape
# (100,)
print y.shape
# (85,)

xx,yy=np.meshgrid(x,y,indexing='ij')

print xx.shape
#(100, 85)
print yy.shape
#(100, 85)

【讨论】:

因此,为了解决这个问题,当我使用分类器预测概率时,我们执行 clf.predict_proba(xx),它会产生一个 100x2 矩阵。第二列是“真”的概率,我需要在 x 轴上绘制 X[:,0],在 y 轴上绘制 X[:,1]。尝试这样做会产生错误...有什么想法吗?

以上是关于如何在 Matplotlib 中使用带有大型数组的网格网格?的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有colorbar的matplotlib pgf导入到latex文档中

Matplotlib:带有第二个 y 轴的 imshow

第十一篇 绘图

如何使用 matplotlib 在 python 中绘制 3D 密度图

如何使用 matplotlib 将 3D numpy 数组可视化为 GIF? [关闭]

如何过滤数组中不需要的值以进行绘图?使用 numpy 数组的 matplotlib 中的 ValueError