Đây là không gian tên chính xác cho các chức năng:
Cả hai hàm đều trả về các mảng 1D dẹt chỉ vào các cấu trúc bộ nhớ mới.
import numpy
a = numpy.array([[1,2],[3,4]])
r = numpy.ravel(a)
f = numpy.ndarray.flatten(a)
print(id(a))
print(id(r))
print(id(f))
print(r)
print(f)
print("\nbase r:", r.base)
print("\nbase f:", f.base)
---returns---
140541099429760
140541099471056
140541099473216
[1 2 3 4]
[1 2 3 4]
base r: [[1 2]
[3 4]]
base f: None
Trong ví dụ trên:
- vị trí bộ nhớ của kết quả là khác nhau,
- kết quả trông giống nhau
- flatten sẽ trả lại một bản sao
- Ravel sẽ trả lại một cái nhìn.
Làm thế nào chúng ta kiểm tra nếu một cái gì đó là một bản sao? Sử dụng .basethuộc tính của ndarray. Nếu đó là một khung nhìn, cơ sở sẽ là mảng ban đầu; nếu nó là một bản sao, cơ sở sẽ được None.