Định hình lại trong Python là gì?

cục mịch. định hình lại không phải lúc nào cũng hoạt động như mong đợi và nhiều lần tôi gần như phát điên khi tìm kiếm các lỗi trong mã của mình và cuối cùng Đó là do np. định hình lại không hoạt động như tôi mong đợi và một số phần tử của mảng cũ đã kết thúc ở những vị trí không mong muốn trong mảng mới. Vì điều này, nhiều lần tôi đã làm việc xung quanh np. định hình lại, nhưng hôm nay tôi sẽ đối mặt với định mệnh của mình

hình dạng mảng

mảng một chiều

Trong NumPy, một mảng có hình dạng cụ thể. Khi chúng ta tạo một mảng với np. mảng, numpy tự động suy ra hình dạng. Hãy tạo mảng một chiều

[Tất cả hình ảnh được cung cấp bởi tác giả]

Chúng ta có thể in hình dạng của mảng bằng cách gõ

Hình dạng của mảng này sẽ là

Đừng để bị phân tâm bởi dấu phẩy trong bộ hình dạng, nó chỉ ở đó để chúng ta có thể xác định nó là một bộ. Nó vẫn là một mảng một chiều

mảng hai chiều

Khi tạo mảng hai chiều ta phải dùng dấu ngoặc kép

Chúng ta có thể in hình dạng của mảng bằng cách gõ

Hình dạng của mảng này sẽ là

Hình dạng của mảng là. [số hàng, số cột]. Hay nói cách khác [chỉ mục đầu tiên, chỉ mục thứ hai]

Để hiểu điều này với chỉ mục đầu tiên, chỉ mục thứ hai tốt hơn một chút. Hãy tưởng tượng toàn bộ mảng trải dài như thế này

Khi chúng ta lập chỉ mục mảng theo cách sau

Chúng tôi áp dụng chỉ số đầu tiên [1]

Sau đó, chỉ số thứ hai [2]

mảng 3 chiều

Chúng ta có thể tạo một mảng ba chiều bằng cách sử dụng ba mức dấu ngoặc

Sau đó, chúng tôi có chỉ số thứ nhất, thứ hai và thứ ba

Mảng nhiều chiều hơn

Đối với bất kỳ mảng nào có nhiều chiều hơn, chúng ta có thể áp dụng logic tương tự. Chỉ mục đầu tiên là chỉ mục bên ngoài nhất và chỉ mục cuối cùng là chỉ mục được bao bọc trong nhiều dấu ngoặc nhất

np. định hình lại

Có hai bước suy nghĩ trong quá trình định hình lại. Bước đầu tiên là cuộn mảng thành một đường thẳng và bước thứ hai là cuộn nó trở lại hình dạng được chỉ định mới

Bây giờ câu hỏi là. Thứ tự mà các phần tử được mở ra và cuộn thành hình dạng mới là gì?

thứ tự = 'C'

C thực sự là viết tắt của ngôn ngữ lập trình C. Đây là thứ tự mặc định và nếu chúng ta gõ

Sau đó, mảng “arr” được định hình lại thành hình dạng [3,4]. Và thứ tự sẽ là thứ tự C. Vì vậy, nó sẽ giống như

Với thứ tự C, cả hai chúng tôi đều hủy đăng ký và khôi phục với chỉ mục cuối cùng thay đổi nhanh nhất và chỉ mục đầu tiên thay đổi chậm nhất

Đối với mảng 2 chiều, chúng tôi bỏ chọn mảng có chỉ số [giây] cuối cùng thay đổi nhanh nhất. Và chúng tôi quay lại với chỉ số [giây] cuối cùng thay đổi nhanh nhất

Toàn bộ quá trình cũng có thể được nhìn thấy trong hình ảnh động sau đây

Đối với mảng 3 chiều, chúng tôi bỏ chọn mảng có chỉ số cuối cùng [thứ ba] thay đổi nhanh nhất. Và chúng tôi quay lại với chỉ số [thứ ba] cuối cùng thay đổi nhanh nhất

Khi bạn đã hiểu cách thức hoạt động của nó, bạn cũng có thể chuyển trực tiếp từ mảng đầu vào sang mảng đầu ra, bỏ qua bước hủy kiểm soát. Chúng ta cũng có thể định hình lại mảng 2 chiều thành mảng 3 chiều và thực tế là mọi sự kết hợp khác của các chiều có thể tưởng tượng được. Tôi có thể đưa ra nhiều ví dụ hơn ở đây, nhưng nếu bạn tuân thủ nghiêm ngặt quy trình hủy cuộn và định hình lại thành dạng mong muốn, thì sẽ rất dễ hiểu

thứ tự = 'F'

F thực sự là viết tắt của ngôn ngữ lập trình Fortran. Để sử dụng thứ tự này, chúng ta phải chỉ định nó, ví dụ

Theo thứ tự Fortran, chúng ta hủy đăng ký bằng cách thay đổi chỉ số đầu tiên nhanh nhất, chỉ số thứ hai chỉ số cuối cùng thay đổi chậm nhất

Đối với mảng 2 chiều, chúng ta có chỉ số đầu tiên thay đổi nhanh nhất và chỉ số thứ hai chậm nhất

Một chút hoạt hình

Đối với mảng numpy ba chiều, chỉ số đầu tiên thay đổi nhanh nhất và chỉ số thứ ba chậm nhất

thứ tự = 'A'

order = 'A', định hình lại theo thứ tự C hoặc theo thứ tự Fortran, tùy thuộc vào cách mảng được lưu trữ trong bộ nhớ. Nếu nó được lưu trong bộ nhớ, như trong ngôn ngữ lập trình C, thì order = ‘A’ sẽ định hình lại bằng C order. Nếu mảng được lưu trữ trong bộ nhớ như trong ngôn ngữ lập trình Fortran, thì nó sẽ định hình lại theo thứ tự fortran. Điều này có khả năng tăng tốc mã của bạn, nhưng tôi thực sự chưa bao giờ sử dụng nó, vì kết quả không thể dự đoán được

Hủy đăng ký theo thứ tự Fortran và định hình lại theo thứ tự C?

Chúng ta có thể sử dụng np. hàm ravel để hủy đăng ký một mảng theo thứ tự Fortran và np. định hình lại để định hình lại mảng không được kiểm soát theo thứ tự C

Định hình lại giống như hoạt hình

Bỏ cuộn theo thứ tự C và định hình lại theo thứ tự F

Chúng tôi chỉ cắt xén theo thứ tự C và định hình lại theo thứ tự F, điều này sẽ dễ hiểu, nhưng đây là một hình ảnh động, để bạn có thể thực sự nhìn thấy nó

Giống như trong np. định hình lại, thứ tự mặc định trong np. ravel là C. Vì vậy, nếu chúng tôi không chỉ định nó, np. ravel sẽ mở theo thứ tự C

-1 trong np. định hình lại

Chúng ta có thể sử dụng -1 trong một hình dạng trong np. định hình lại. -1 Là trình giữ chỗ và tự động nhận giá trị phù hợp để hình dạng đầu vào và đầu ra khớp với nhau. Điều này đặc biệt hữu ích nếu chúng ta viết một hàm và chúng ta không biết kích thước chính xác của mảng đầu vào, nhưng chúng ta biết ví dụ, rằng đầu ra phải có 2 cột. Nhưng lưu ý rằng chỉ có một giá trị tại một thời điểm có thể được thay thế bằng -1. Vì vậy, chúng ta phải biết tất cả trừ một chiều của mảng đầu ra

Định hình lại Python có nghĩa là gì?

reshape[] cho phép chúng ta định hình lại một mảng trong Python. Định hình lại về cơ bản có nghĩa là thay đổi hình dạng của một mảng . Và hình dạng của một mảng được xác định bởi số phần tử trong mỗi chiều. Định hình lại cho phép chúng tôi thêm hoặc xóa kích thước trong một mảng.

ý nghĩa của định hình lại là gì [

Ví dụ. 12 phần tử với reshape[-1,1] tương ứng với một mảng có x =12/1=12 hàng và 1 cột . 12 phần tử với reshape[1,-1] tương ứng với mảng có 1 hàng và x =12/1=12 cột.

Reshape 1 Python là gì?

Nếu bạn có một mảng có hình dạng [2,4], sau đó định hình lại mảng đó bằng [-1, 1], thì mảng sẽ được định hình lại theo cách mà kết quả thu được . and this is only possible by having 8 rows, hence, [8,1].

Định hình lại NumPy có nghĩa là gì?

numpy. reshape[a, newshape, order='C'][source] Tạo hình mới cho mảng mà không thay đổi dữ liệu của mảng .

Chủ Đề