Hay una manera sencilla para borrar todos los elementos de una colección de la matriz? He intentado:

del arrayname

Esto elimina la matriz completamente. Yo estoy usando esta matriz dentro de un bucle for que recorre miles de veces, así que prefiero mantener la matriz pero rellenar con nuevos elementos cada vez.

Traté de numpy.eliminar, pero para mi requisito no veo el uso de subarray especificación.

*Editado*:

El tamaño de la matriz se no va a ser el mismo.

Me asignar el espacio, dentro del bucle al principio, de la siguiente manera. Por favor me corrija si este es un camino equivocado:

arrname = arange(x*6).reshape(x,6)

He leído un conjunto de datos y la construcción de esta matriz para cada tupla del conjunto de datos. Todo lo que sé es que el número de columnas que va a ser el mismo pero no el número de filas. Por ejemplo, la primera vez que necesito una matriz de tamaño (3,6), para la siguiente tupla como (1,6) y la próxima vez (4,6) y así sucesivamente. La forma en que me rellenar la matriz es como sigue:

arrname[:,0] = lstname1
arrname[:,1] = lstname2
...

En otras palabras, las columnas están llenas de listas construido a partir de las tuplas. Así que, antes de la siguiente bucle comienza desea borrar sus elementos y prepararla para el consecutivo de bucle ya no quiero restos de la anterior bucle de mezcla el contenido actual.

  • claro está totalmente indefinido aquí. Hacer de ellos unos, ceros, de nan. aclaró que para mí significa, a menudo utilizando un maskedarray (echa un vistazo a numpy.ma). Fácil de hacer una vez que definir lo que significa.
  • Tengo que intentó definir de forma «clara» por la edición de mi pregunta
InformationsquelleAutor Jey | 2012-07-17

4 Comentarios

  1. 2

    Con una wag de los dedos para una posible optimización prematura, voy a ofrecer algunos pensamientos:

    Usted dice que usted no quiere que los restos que quedan de iteraciones anteriores. Desde el código parece que rellenar cada uno de los nuevos elementos de la columna por columna para cada uno de los número de columnas. «Sobrantes» los valores no se ven como un problema. considerar:

    • utilizando arange y remodelar sirve a ningún propósito. uso np.empty((n,6)). Más rápido que ones o zeros por un pelo.

    • también la construcción de su nueva matriz a partir de los constituyentes

    Ver:

    lstname1 = np.arange(3)
    lstname2 = 22*np.arange(3)
    np.vstack((lstname1,lstname2)).T
    # returns
    array([[ 0,  0],
           [ 1, 22],
           [ 2, 44]])
    #or
    np.hstack((lstname1[:,np.newaxis],lstname2[:,np.newaxis]))
    array([[ 0,  0],
           [ 1, 22],
           [ 2, 44]])

    Por último, Si usted está realmente preocupado acerca de la velocidad, usted puede asignar el mayor tamaño esperado (si no se conoce el usted puede comprobar el tamaño solicitado vs la última y más grande si es más grande, a continuación, utilizar np.empty((rows,cols)) para aumentar el tamaño.

    A continuación, en cada iteración, se crea una vista de la gran matriz de sólo el número de filas que desee. Esto hará que numpy para reutilizar el mismo espacio en el buffer y no se necesita para la asignación en cada una de sus iteraciones. Aviso:

    In [36]: big = np.vstack((lstname1,lstname2)).T
    
    In [37]: smaller = big[:2]
    
    In [38]: smaller[:,1]=33
    
    In [39]: smaller
    Out[39]: 
    array([[ 0, 33],
           [ 1, 33]])
    In [40]: big
    Out[40]: 
    array([[ 0, 33],
           [ 1, 33],
           [ 2, 44]])

    Nota Estas son sugerencias que se ajuste a sus ampliado pregunta con la aclaración y no se ajusta a tu pregunta anterior sobre la «eliminación» de la matriz. Incluso en el último ejemplo, usted podría decir fácilmente smaller.fill(0) para disipar las preocupaciones dependiendo de que sea fiable reasignar todos los elementos de la matriz en su iteraciones.

  2. 4

    No estoy seguro de lo que quieres decir por clara, la matriz será siempre tienen algunos valores almacenados en el mismo, pero puede establecer los valores a algo, por ejemplo:

    >>> A = numpy.array([[1, 2], [3, 4], [5, 6]], dtype=numpy.float)
    >>> A
    array([[ 1.,  2.],
           [ 3.,  4.],
           [ 5.,  6.]])
    
    >>> A.fill(0)
    >>> A
    array([[ 0.,  0.],
           [ 0.,  0.],
           [ 0.,  0.]])
    
    >>> A[:] = 1.
    >>> A
    array([[ 1.,  1.],
           [ 1.,  1.],
           [ 1.,  1.]])

    Actualización

    Primero, tu pregunta es muy claro. El más esfuerzo que puso en escribir una pregunta en la que la mejor respuesta que se obtiene. Una buena pregunta debe dejar claro a nosotros lo que estamos tratando de hacer y por qué. También los datos del ejemplo es muy útil, sólo una pequeña cantidad, por lo que podemos ver exactamente lo que estás tratando de hacer.

    Lo que se dice. Parece que tal vez usted sólo debe crear una nueva matriz para cada iteración. Creación de matrices es bastante rápido y no está claro por qué se quiere volver a utilizar una matriz cuando el tamaño y el contenido de la necesidad de cambio. Si usted está tratando de volver a utilizarla por motivos de rendimiento, usted probablemente no va a ver ninguna diferencia apreciable, el tamaño de las matrices no es notablemente más rápido que la creación de una nueva matriz. Puede crear una nueva matriz llamando numpy.zeros((X, 6))

    También en tu pregunta dices:

    las columnas están llenas de listas construido a partir de las tuplas

    Si sus datos ya están alojados como una lista de tuplas de utilizar numpy.array para convertir un array. Usted no necesita ir a la molestia de crear una matriz y llenado. Por ejemplo si yo quería ir a (2, 3) de la matriz a partir de una lista de tuplas que yo haría:

    data = [(0, 0, 1), (0, 0, 2)]
    A = numpy.array(data)
    
    # or if the data is stored like this
    data = [(0, 0), (0, 0), (1, 2)]
    A = numpy.array(data).T

    Espero que ayude.

    • El tamaño de la matriz de los cambios. Por favor vea mis editado pregunta
  3. 1

    Si quieres mantener la matriz asignado, y con el mismo tamaño, no es necesario borrar los elementos. Simplemente tiene que seguir la pista de donde están, y sobrescribir los valores en la matriz. Esta es la manera más eficiente de hacerlo.

  4. 0

    Yo simplemente empezar a poner los nuevos valores en la matriz.

    Pero si usted insiste en la limpieza de la matriz, trate de hacer una nueva del mismo tamaño usando ceros o vacío.

    >>> A = numpy.array([[1, 2], [3, 4], [5, 6]])
    >>> A
    array([[1, 2],
           [3, 4],
           [5, 6]])
    
    >>> A = numpy.zeros(A.shape)
    >>> A
    array([[ 0.,  0.],
           [ 0.,  0.],
           [ 0.,  0.]])
    • Creo que el OP quiere mutar a la matriz original, en lugar de crear uno nuevo, ya que esto hace.

Dejar respuesta

Please enter your comment!
Please enter your name here