Flatten Python là gì

API hiện tại là:

  • flattenNAME _ luôn trả về một bản sao.
  • ravelNAME _ trả về chế độ xem của mảng ban đầu bất cứ khi nào có thể. Điều này không thể nhìn thấy trong đầu ra được in, nhưng nếu bạn sửa đổi mảng được trả về bởi ravel, nó có thể sửa đổi các mục trong mảng ban đầu. Nếu bạn sửa đổi các mục trong một mảng được trả về từ làm phẳng thì điều này sẽ không bao giờ xảy ra. Ravel thường sẽ nhanh hơn vì không có bộ nhớ được sao chép, nhưng bạn phải cẩn thận hơn về việc sửa đổi mảng mà nó trả về.
  • reshape[[-1,]] có chế độ xem bất cứ khi nào các bước của mảng cho phép ngay cả khi điều đó có nghĩa là bạn không luôn luôn có được một mảng liền kề.

Như đã giải thích ở đây một điểm khác biệt chính là flatten là một phương thức của một đối tượng ndarray và do đó chỉ có thể được gọi cho các mảng numpy thực sự. Ngược lại, ravel[] là một hàm cấp thư viện và do đó có thể được gọi trên bất kỳ đối tượng nào có thể được phân tích cú pháp thành công. Ví dụ: ravel[] sẽ hoạt động trên một danh sách các ndarrays, trong khi flatten không có sẵn cho loại đối tượng đó.

@IanH cũng chỉ ra những khác biệt quan trọng trong việc xử lý bộ nhớ trong câu trả lời của anh ấy.

Đây là không gian tên chính xác cho các chức năng:

  • numpy.ndarray.flatten
  • numpy.ravel

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 thuộc tính .base của ndarray. Nếu đó là một khung nhìn, cơ sở sẽ là mảng ban đầu; nếu là bản sao, cơ sở sẽ là None.

Video liên quan

Chủ Đề