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.

Indexación de matrices de Numpy: ¿vista o copia? – ¿depende del alcance?

Considere las siguientes manipulaciones de arrays:

import numpy as np
def f(x):
     x += 1
x = np.zeros(1)
f(x)       # cambia `x`
f(x[0])    # no cambia `x`
x[0] += 1  # cambia `x`

¿Por qué x[0] se comporta de manera diferente dependiendo de si += 1 ocurre dentro o fuera de la función f?

¿Puedo pasar una parte del array a la función de manera que la función modifique el array original?


Edit: Si consideráramos = en lugar de +=, probablemente podríamos mantener el núcleo de la pregunta al mismo tiempo que nos deshacemos de cierta complejidad irrelevante.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El comportamiento de x[0] depende del hecho de que los objetos numpy.ndarray en Python son mutables y se pasan por referencia. Cuando x se pasa a la función f, la función modifica el objeto numpy.ndarray original agregándole 1 a su valor. Sin embargo, cuando se pasa x[0] a f, se pasa como un entero simple (no como un objeto ndarray), y el operador += crea un nuevo objeto entero con el valor de x[0]+1, que luego se asigna a x[0] pero no se actualiza en el ndarray.

    Para modificar una parte del objeto ndarray original, podemos pasar una porción del array a la función, como f(x[:1]). Esto pasará el primer elemento del array como un objeto ndarray a la función, y cualquier modificación realizada en este objeto se reflejará en el objeto ndarray original.

Comments are closed.