1
resposta

Como selecionar apenas as matrizes 2x2 (usando Numpy)


kf = KFold(n_splits=11, random_state=None, shuffle=False)
kf.get_n_splits(previsores)
for train_index, test_index in kf.split(previsores):

    X_train, X_test = previsores[train_index], previsores[test_index]
    y_train, y_test = classe[train_index], classe[test_index]

    logmodel.fit(X_train, y_train)
    print (confusion_matrix(y_test, logmodel.predict(X_test)))


    lista_matrizes.append(confusion_matrix(y_test, logmodel.predict(X_test)))

O programa gera a seguinte lista_matrizes:

[array([[208699,      0],
        [ 22215,      0]]),
 array([[230914]]),
 array([[230914]]),
 array([[230914]]),
 array([[221305,      0],
        [  9608,      0]]),
 array([[191015,      0],
        [ 39898,      0]]),
 array([[184768,      0],
        [ 46145,      0]]),
 array([[171497,      0],
        [ 59416,      0]]),
 array([[177588,      0],
        [ 53325,      0]]),
 array([[184221,      0],
        [ 46692,      0]]),
 array([[186929,      0],
        [ 43984,      0]])]

O problema é que apenas quero as matrizes 2 x2, isto é as matrizes 2 x2 sem nenhum Nan.

Como pegar de lista_matrizes apenas as matrizes 2x2?

O que eu tentei fazer:

lista_matrizes[lista_matrizes.shape ==(2,2)

Recebi o erro:

AttributeError: 'list' object has no attribute 'shape'
1 resposta

Olá Edson, você pode varrer esta lista de matrizes e construir uma nova com apenas aquelas com dimensão 2x2, por exemplo:

import numpy as np

lista_matrizes = np.array([
    np.array([[208699,      0],
              [ 22215,      0]]),
    np.array([[230914]]),
    np.array([[230914]]),
    np.array([[230914]]),
    np.array([[221305,      0],
              [  9608,      0]]),
    np.array([[191015,      0],
              [ 39898,      0]]),
    np.array([[184768,      0],
              [ 46145,      0]]),
    np.array([[171497,      0],
              [ 59416,      0]]),
    np.array([[177588,      0],
              [ 53325,      0]]),
    np.array([[184221,      0],
              [ 46692,      0]]),
    np.array([[186929,      0],
              [ 43984,      0]])])

lista_matrizes2x2 = []

for matriz in lista_matrizes:
    if(matriz.shape == (2, 2)):
        lista_matrizes2x2.append(matriz)

#imprime lista de matrizes 2x2:
print(lista_matrizes2x2)

ou ainda poderia usar list comprehensions ao invés do laço for:

lista_matrizes2x2 = [matriz for matriz in lista_matrizes if matriz.shape == (2, 2)]
print(lista_matrizes2x2)

Espero ter ajudado e bons estudos!