Có vẻ như câu hỏi và ví dụ bắt nguồn từ cuốn sách Python để phân tích dữ liệu của Wes McKinney. Tính năng transpose
này được đề cập trong Chương 4.1. Chuyển đổi mảng và hoán đổi trục .
Đối với mảng có chiều cao hơn, transpose
sẽ chấp nhận một bộ số trục để hoán vị các trục (để uốn tâm thêm).
Ở đây "permute" có nghĩa là "sắp xếp lại", nên sắp xếp lại thứ tự các trục.
Các số trong .transpose(1, 0, 2)
xác định thứ tự của các trục được thay đổi như thế nào so với ban đầu. Bằng cách sử dụng .transpose(1, 0, 2)
, chúng tôi có nghĩa là, "Thay đổi chiếc rìu thứ nhất bằng chiếc rìu thứ hai." Nếu chúng ta sử dụng .transpose(0, 1, 2)
, mảng sẽ giữ nguyên vì không có gì thay đổi; nó là thứ tự mặc định.
Ví dụ trong cuốn sách với một (2, 2, 4)
mảng có kích thước không rõ ràng lắm vì trục thứ nhất và thứ hai có cùng kích thước. Vì vậy, kết quả cuối cùng dường như không thay đổi ngoại trừ việc sắp xếp lại các hàng arr[0, 1]
và arr[1, 0]
.
Nếu chúng ta thử một ví dụ khác với mảng 3 chiều với mỗi chiều có kích thước khác nhau, phần sắp xếp lại trở nên rõ ràng hơn.
In [2]: x = np.arange(24).reshape(2, 3, 4)
In [3]: x
Out[3]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
In [4]: x.transpose(1, 0, 2)
Out[4]:
array([[[ 0, 1, 2, 3],
[12, 13, 14, 15]],
[[ 4, 5, 6, 7],
[16, 17, 18, 19]],
[[ 8, 9, 10, 11],
[20, 21, 22, 23]]])
Ở đây, kích thước mảng ban đầu là (2, 3, 4)
. Chúng tôi đã thay đổi thứ 1 và thứ 2, vì vậy nó có (3, 2, 4)
kích thước. Nếu chúng ta quan sát kỹ hơn để xem việc sắp xếp lại chính xác đã diễn ra như thế nào; các mảng số dường như đã thay đổi theo một mô hình cụ thể. Sử dụng phép tương tự trên giấy của @ RobertB , nếu chúng ta lấy 2 phần số và viết từng phần một trên các trang tính, sau đó lấy một hàng từ mỗi trang tính để tạo một chiều của mảng, bây giờ chúng ta sẽ có một mảng có kích thước 3x2x4 , tính từ lớp ngoài cùng đến lớp trong cùng.
[ 0, 1, 2, 3] \ [12, 13, 14, 15]
[ 4, 5, 6, 7] \ [16, 17, 18, 19]
[ 8, 9, 10, 11] \ [20, 21, 22, 23]
Có thể là một ý tưởng hay khi chơi với các mảng có kích thước khác nhau và thay đổi các trục khác nhau để có được trực giác tốt hơn về cách hoạt động của nó.