2012-02-06 3 views
5

Gli array di numpy tengono traccia del loro "stato di visualizzazione"?Puoi dire se un array è una vista di un altro?

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?) 

Quello che sto cercando è numpy.isview() o qualcosa del genere.

Voglio questo per il profiling del codice per essere sicuro che sto facendo le cose correttamente e ottenendo visualizzazioni quando penso di essere.

risposta

5

matrice ha anche un attributo 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

Grazie questo è un bene. "B.base è un" migliore di "a .__ array_interface __ ['data'] [0] == b .__ array_interface __ ['data'] [0]" è più breve ... –

+0

Questo è molto meglio del mio mod. +1, e dovrebbe essere accettato come risposta. – DSM

+0

D'accordo, ho appena giocato con questo ed è buono. –

3

ndarray.flags.owndata indica se l'array possiede i propri dati. Nel tuo esempio:

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

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

Non è chiaramente il più preciso quello che stai chiedendo, ma è il migliore che io conosca.

Problemi correlati