2012-02-06 5 views
5

Многочисленные массивы памяти отслеживают их «статус просмотра»?Можете ли вы рассказать, является ли массив видом другого?

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

Что я ищу, это numpy.isview() или еще что-то.

Я хочу, чтобы это было для профилирования кода, чтобы быть уверенным, что я правильно делаю и получаю представления, когда думаю.

ответ

5

массив также имеет базовый атрибут:

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

Спасибо, что хорошо. Является ли «b.base« лучше, чем ».__ array_interface __ ['data'] [0] == b .__ array_interface __ ['data'] [0]« это короче ... –

+0

Это намного лучше, чем мой хак. +1, и это должно быть принято как ответ. – DSM

+0

Согласен, я просто играл с этим, и это хорошо. –

3

ndarray.flags.owndata указывает, принадлежит ли массив своим данным. В вашем примере:

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

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

Это явно не так точно, как вы просите, но это лучшее, что я знаю.

Смежные вопросы