es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puedo hacer que un arreglo Numpy sea inmutable?

Esta publicación https://stackoverflow.com/a/5541452/6394617

sugiere una forma de hacer que un arreglo de Numpy sea inmutable, utilizando .flags.writeable = False

Sin embargo, cuando pruebo esto:

arr = np.arange(20).reshape((4,5))
arr.flags.writeable = False
arr

for i in range(5):
    np.random.shuffle(arr[:,i])

arr

El arreglo se reordena en su lugar, sin siquiera una advertencia.

PREGUNTA: ¿Existe alguna forma de hacer que el arreglo sea inmutable?

CONTEXTO:

Para dar contexto, estoy haciendo aprendizaje automático y tengo arreglos de características, X, que son de tipo float, y arreglos de etiquetas, y, que son de tipo int.

Soy nuevo en Scikit-learn, pero por lo que he leído, parece ser que los métodos de ajuste (fit) reordenan los arreglos en su lugar. Dicho esto, cuando creé dos arreglos, ajusté un modelo a los datos e inspeccioné los arreglos posteriormente, estaban en el orden original. Así que simplemente no estoy familiarizado con cómo Scikit-learn realiza la reordenación y aún no he encontrado una explicación sencilla en línea al respecto.

Estoy usando muchos modelos diferentes y realizando cierta preprocesamiento entre ellos, y me preocupa que en algún momento mis dos arreglos puedan reordenarse de manera que las filas ya no correspondan adecuadamente.

Me daría tranquilidad si pudiera hacer que los arreglos sean inmutables. Estoy seguro de que podría cambiar a tuplas en lugar de arreglos de Numpy, pero sospecho que eso sería más complicado de programar y más lento.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Basándonos en las pruebas realizadas, establecer la propiedad flags.writeable en False no hace que el array de numpy sea inmutable. Por lo tanto, no parece haber una forma directa de hacer que un array de numpy sea inmutable.

    Como alternativa, crear una copia del array y mezclar la copia podría ser un enfoque mejor para asegurar que el array original se mantenga sin cambios. Esto se puede hacer utilizando el método numpy.copy o simplemente indexando el array con : para crear una copia.

    Otra opción podría ser usar una tupla en lugar de un array de numpy, ya que las tuplas son inmutables. Sin embargo, es importante tener en cuenta que esto podría afectar el rendimiento y la complejidad del código.

Comments are closed.