在matplotlib中绘制多个图时的索引错误

时间:2018-09-11 03:21:30

标签: python matplotlib

我正在尝试通过子图绘制多个图形。代码“有效”,但是它总是给我一个索引错误,我一生都无法发现。

作为附带的问题,我想知道是否有人知道如何使每个单独的图块保持相同的大小。例如,如果我添加更多的行或列,则每个图都会变小。谢谢。

count = 0
n_rows = 2
n_columns = 2
f, axarr = plt.subplots(n_rows, n_columns)
plt.figure(figsize=(20,20))

for column in range(n_cols):
    for row in range(n_rows):
        axarr[row, column].imshow(generate_pattern('block3_conv1', count, size=150))

        count += 1

enter image description here

错误

IndexError                                Traceback (most recent call last)
<ipython-input-37-7f7ae19e07e9> in <module>()
      7 for column in range(n_cols):
      8     for row in range(n_rows):
----> 9         axarr[row, column].imshow(generate_pattern('block3_conv1', count, size=150))
     10 
     11         count += 1

IndexError: index 2 is out of bounds for axis 1 with size 2

使用的功能代码

def generate_pattern(layer_name, filter_index, size=150):
    # Build a loss function that maximizes the activation
    # of the nth filter of the layer considered.
    layer_output = model.get_layer(layer_name).output
    loss = K.mean(layer_output[:, :, :, filter_index])

    # Compute the gradient of the input picture wrt this loss
    grads = K.gradients(loss, model.input)[0]

    # Normalization trick: we normalize the gradient
    grads /= (K.sqrt(K.mean(K.square(grads))) + 1e-5)

    # This function returns the loss and grads given the input picture
    iterate = K.function([model.input], [loss, grads])

    # We start from a gray image with some noise
    input_img_data = np.random.random((1, size, size, 3)) * 20 + 128.

    # Run gradient ascent for 40 steps
    step = 1.
    for i in range(40):
        loss_value, grads_value = iterate([input_img_data])
        input_img_data += grads_value * step

    img = input_img_data[0]
    return deprocess_image(img)

def deprocess_image(x):
    x -= x.mean()
    x /= (x.std() + 1e-5)
    x *= 0.1

    x += 0.5
    x = np.clip(x,0,1)

    x *= 255
    x = np.clip(x,0,255).astype('uint8')

    return x  

1 个答案:

答案 0 :(得分:1)

此错误是由于尝试用超出索引范围的值索引entity Fournisseur { nom String required, adresse String required, numCompte String required, numTel String required } entity Cat { nom String required, } entity Article { nom String required, designation String required, tva Float required, prixUnitaireHT Float required, prixTTC Float required, cat Cat required } entity Stock { quantite Integer required article Article required } entity Clientt { nom String required, adresse String required, numCompte String required, numTel String required, numCin String required, } entity Commande { date LocalDate required, clientt Clientt required } entity LigneCommande { quantite Integer required, commande Commande required, article Article required } entity LigneArticle { qte Integer required, fournisseur Fournisseur required } entity Facture { date Instant required, totalFinale Float required, modeReglement Float required, dateReglement Instant required, commande Commande required } 生成的数组而导致的。一种显示这种情况的方法是用仅数字替换循环中的变量。在这种情况下,您会看到plt.subplots()会产生以下错误:

axarr[1,2]

我们知道在--------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-39-31f90736bd1d> in <module>() 2 #plt.figure(figsize=(20,20)) 3 ----> 4 a[0,2] IndexError: index 2 is out of bounds for axis 1 with size 2 函数中不会发生错误,因为错误消息会显示出很多错误。