¿Cómo se “elimina” una matriz numpy de una lista de matrices numpy?

Si tengo una lista de matrices numpy, el uso del método remove devuelve un error de valor.

Por ejemplo:

import numpy as np l = [np.array([1,1,1]),np.array([2,2,2]),np.array([3,3,3])] l.remove(np.array([2,2,2])) 

Me daria

ValueError: el valor de verdad de una matriz con más de un elemento es ambiguo. Utilice a.any () o a.all ()

Parece que no consigo que todo () funcione, ¿no es posible?

El problema aquí es que cuando se comparan dos matrices numpy con ==, como en los métodos remove () e index (), se devuelve una matriz numpy de valores booleanos (las comparaciones de elemento por elemento) que se interpreta como ambigua. Una buena manera de comparar dos matrices numpy para la igualdad es usar la función array_equal () de numpy.

Dado que el método remove () de las listas no tiene un argumento clave (al igual que sort (), creo que necesitas hacer tu propia función para hacer esto. Aquí hay uno que hice:

 def removearray(L,arr): ind = 0 size = len(L) while ind != size and not np.array_equal(L[ind],arr): ind += 1 if ind != size: L.pop(ind) else: raise ValueError('array not found in list.') 

Si necesita que sea más rápido, entonces podría usar Cython-ize.

Aqui tienes:

 list.pop(1) 

Actualizar:

 list.pop(list.index(element)) 

No creo que puedas moverte por la lista para encontrar la posición del elemento. No te preocupes por eso. Python usará, de manera predeterminada, un buen algoritmo de búsqueda para encontrarlo al menor costo para usted.