2012-02-06 14 views
5

¿Las matrices numpy realizan un seguimiento de su "estado de vista"?¿Puedes decir si una matriz es una vista de otra?

import numpy 
a = numpy.arange(100) 
b = a[0:10] 
b[0] = 100 
print a[0] 
# 100 comes out as it is a view 
b is a[0:10] 
# False (hmm how to ask?) 

Lo que estoy buscando es numpy.isview() o algo así.

Quiero esto para el perfil de código para estar seguro de que estoy haciendo las cosas correctamente y obteniendo vistas cuando creo que estoy.

Respuesta

5

la matriz también tiene un atributo base:

a = np.arange(10) 
print a.base 
None 

b = a[2:9] 
print b.base is a 
True 

c = b[:2] 
print c.base is b 
True 
print c.base is a 
False 
+0

Gracias Eso es bueno. Is "b.base is a" better than "a .__ array_interface __ ['data'] [0] == b .__ array_interface __ ['data'] [0]" es más corto ... –

+0

Esto es mucho mejor que mi cortar. +1, y debe ser aceptado como la respuesta. – DSM

+0

De acuerdo, acabo de jugar con esto y está bien. –

3

ndarray.flags.owndata le indica si la matriz posee sus datos. En su ejemplo:

In [18]: a.flags.owndata 
Out[18]: True 

In [19]: b.flags.owndata 
Out[19]: False 

No es tan preciso como claramente lo que estás pidiendo, pero es el mejor que conozco.

Cuestiones relacionadas