Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Duda arreglos Numpy a+= a.T

Estas en el tema de Duda arreglos Numpy a+= a.T en el foro de Python en Foros del Web. Porque el arreglo a no es simétrico ? @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Python: Ver original import numpy as np   a = np. ones ( ( ...
  #1 (permalink)  
Antiguo 17/07/2013, 16:21
 
Fecha de Ingreso: julio-2011
Mensajes: 62
Antigüedad: 13 años, 3 meses
Puntos: 0
Pregunta Duda arreglos Numpy a+= a.T

Porque el arreglo a no es simétrico ?
Código Python:
Ver original
  1. import numpy as np
  2.  
  3. a = np.ones((100, 100))
  4. a += a.T
>>>a
array([[ 2., 2., 2., ..., 2., 2., 2.],
[ 2., 2., 2., ..., 2., 2., 2.],
[ 2., 2., 2., ..., 2., 2., 2.],
...,
[ 3., 3., 3., ..., 2., 2., 2.],
[ 3., 3., 3., ..., 2., 2., 2.],
[ 3., 3., 3., ..., 2., 2., 2.]])

No es lo mismo a+= a.T que a = a + a.T
Código Python:
Ver original
  1. import numpy as np
  2.  
  3. a = np.ones((100, 100))
  4. a = a + a.T
>>>a
array([[ 2., 2., 2., ..., 2., 2., 2.],
[ 2., 2., 2., ..., 2., 2., 2.],
[ 2., 2., 2., ..., 2., 2., 2.],
...,
[ 2., 2., 2., ..., 2., 2., 2.],
[ 2., 2., 2., ..., 2., 2., 2.],
[ 2., 2., 2., ..., 2., 2., 2.]])

Este ejemplo aparece en http://scipy-lectures.github.io/intr...ng-and-slicing, menciona que son vistas de un arreglo.
  #2 (permalink)  
Antiguo 17/07/2013, 16:46
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Duda arreglos Numpy a+= a.T

Cita:
A slicing operation creates a view on the original array, which is just a way of accessing array data. Thus the original array is not copied in memory.

When modifying the view, the original array is modified as well:
This behavior can be surprising at first sight... but it allows to save both memory and time.

As a result, a matrix cannot be made symmetric in-place.
En C en concepto de x += 1; es igual a x = x + 1; pero en otros lenguajes no es cierto por ejemplo python o C++. Por la simple razón que existen sobrecarga de operadores.

Siguiendo con el problema:
Según lo que te dicen que a.T es una vista de a y no una copia. Y si a esto le añades que += hace la suma in-place (osea sobre el arreglo original a) entonces obviamente vas a tener problemas.

Con valores pequeños no tendrás problemas (matrices de 3x3 incluso de 20x20) pero con matrices grandes si tendrás problemas.
  #3 (permalink)  
Antiguo 19/07/2013, 07:22
 
Fecha de Ingreso: julio-2011
Mensajes: 62
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Duda arreglos Numpy a+= a.T

Gracias razpeitia, que interpretaciòn tiene in-place en español.
  #4 (permalink)  
Antiguo 19/07/2013, 10:06
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Duda arreglos Numpy a+= a.T

Cita:
Iniciado por Bael_Balzac Ver Mensaje
Gracias razpeitia, que interpretaciòn tiene in-place en español.
Que no hace una copia, tiene mucho que ver con mutable e inmutable ejemplo:
Código Python:
Ver original
  1. l = [2, 1, 3, 5, 4]
  2. l.sort() # in-place
  3. print l
  4.  
  5. l = [2, 1, 3, 5, 4]
  6. nueva_lista = sorted(l)
  7. print nueva_lista
  #5 (permalink)  
Antiguo 19/07/2013, 13:55
 
Fecha de Ingreso: julio-2011
Mensajes: 62
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Duda arreglos Numpy a+= a.T

Lo interpretaba como in-situ.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:25.