2016-12-02 90 views
0

进出口新的蟒蛇一格,我试着去创造的12级人物3X4格图,the数字看起来像这样:从创建人物蟒蛇

enter image description here

我用这个代码使它们显示:

for i in range(0,11): 
    show(x_train[i].reshape(28,28)) 

其中显示定义如下:

def show(mnst): 
    plt.figure() 
    plt.imshow(mnst, cmap='gray', interpolation='nearest') 
    plt.show() 

现在我试图做我想做的是如下:

show(x_train[:12].reshape(28*3,28*4)); 

我看了这个代码需要从x_train 12个第一的数字,这是每一个28X28,并重塑整个一个数字的28X28数字的3X4格子的东西。

但由于某些原因,我得到这个怪异的12×4数字: 

enter image description here

我失去了什么? 

+2

看来x_train是一个(12 x 784)形阵列?当你按照自己的方式重塑它时,第一张图像(即28x28的平面图像)的前3行像素会在第一行上被抹掉。你看到的第二行像素是第一个图像的第四,第五和第六行像素,等等。这是否会导致你的问题? – Haminaa

+0

我认为它可能会发生,因为你正在重新调整28x12 * 28阵列,而不是1x12阵列。首先3行是每张图片的第一行,而不是4张图片的3行第一行。 –

+0

@Haminaa是的,但即使我做x_train [:12] .flatten()然后重塑(28 * 3,28 * 4)我仍然得到相同的结果,因为即时通讯尝试学习我会appriciate,如果你们可以领导我在正确的方向如何解决我的解决方案...(使用12X784阵列重塑的解决方案) –

回答

1

循环使用正在使用的函数会导致在每次迭代中创建一个新的figure实例。如果您想绘制多个图像,则需要创建一个包含多个子图的单一figure

有很多方法可以在python的单个图中创建子图。我经常使用(并且似乎是你需要的)是plt.subplots()。你可以开始你的身材如下:

fig,axes = plt.subplots(3,4, figsize=[12,9]) 

这将返回一个数字实例fig和轴组成的数组(斧头是在您绘制图像帧)的3行4列。 然后,您可以通过在轴上循环来在每个斧头中绘制(或.imshow)。

for i,iax in enumerate(axes.flatten()): 
    iax.imshow(x_train[i].reshape(28,28), cmap='gray', interpolation='nearest') 
fig.show() 

请注意,我扁平了包含轴的数组。这不会更改子图的布局,因为它不会影响使用plt.subplots()创建的ax实例。

+0

如果您重新阅读这个问题,您会注意到我重复了这些图像只是为了看到它们并向您显示他们的例子。然后我做了这个节目(x_train [:12] .reshape(28 * 3,28 * 4));并应该工作,即时试图了解为什么那没有工作... –

+0

对不起,我试图解决您的问题更多,以回答这个问题。我对您的原始问题添加了评论 – Haminaa