2012-02-06 38 views
5

Làm các mảng có nhiều mảng theo dõi "trạng thái xem" của chúng?Bạn có thể cho biết một mảng có phải là khung nhìn của một mảng khác không?

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

Những gì tôi đang tìm kiếm là numpy.isview() hoặc một cái gì đó.

Tôi muốn điều này cho việc lập hồ sơ mã để đảm bảo rằng tôi đang làm những việc chính xác và nhận được lượt xem khi tôi nghĩ rằng mình đang làm.

Trả lời

5

mảng cũng có một thuộc tính cơ bản:

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

Nhờ đó là tốt. "B.base là" tốt hơn "a .__ mảng_interface __ ['dữ liệu'] [0] == b .__ mảng_interface __ ['dữ liệu'] [0]" ngắn hơn ... –

+0

Điều này tốt hơn nhiều so với hack. 1, và nó phải được chấp nhận như là câu trả lời. – DSM

+0

Đồng ý, tôi chỉ chơi với điều này và nó là tốt. –

3

ndarray.flags.owndata cho bạn biết mảng có sở hữu dữ liệu hay không. Trong ví dụ của bạn:

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

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

Rõ ràng không chính xác như những gì bạn đang yêu cầu, nhưng đó là điều tốt nhất mà tôi biết.

Các vấn đề liên quan