Đâ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 .base
thuộ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
.