Hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
4 dùng để định hình lại mảng có nhiều mảng mà không làm thay đổi dữ liệu trong mảng. Một thực tế rất phổ biến là định hình lại các mảng để làm cho chúng tương thích với các tính toán tiếp theo.Trong bài viết này, bạn sẽ tìm hiểu về các trường hợp sử dụng có thể có của hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
5cục mịch. định hình lại
- cú pháp. cục mịch. định hình lại [a, hình dạng mới, thứ tự = 'C']
- Mục đích. Cung cấp một hình dạng mới cho mảng mà không thay đổi dữ liệu
- Thông số
- a. _arraylike Mảng được định hình lại
- hình mới. int hoặc bộ của ints Nên tương thích với hình dạng ban đầu. Nếu là một số nguyên, thì kết quả sẽ là một mảng 1-D có độ dài đó. Một kích thước hình dạng có thể là -1. Trong trường hợp này, giá trị được suy ra từ độ dài của mảng và các kích thước còn lại
- trật tự. {'C', 'F', 'A'}, tùy chọn Đọc các phần tử của a bằng cách sử dụng thứ tự chỉ mục này và đặt các phần tử vào mảng được định hình lại theo thứ tự chỉ mục này. Cách sử dụng chi tiết sẽ được thảo luận thêm
- Trả về reshape_array ndarray
# Import Packages
import numpy as np
1. Nặng nề. định hình lại chức năng
Hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
4 được sử dụng để thay đổi hình dạng của mảng numpy mà không sửa đổi dữ liệu mảng. Để sử dụng chức năng này, hãy chuyển mảng và hình dạng mới cho array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7. Đối số hình dạng phải được truyền ở dạng “tuple” hoặc “int”Hãy hiểu điều này với các ví dụ
Định hình lại mảng 1-D thành mảng 2-D
Trong ví dụ này, bạn phải chuyển đổi mảng 1 chiều hình dạng [8,] thành mảng 2 chiều hình dạng [4,2]
Bước 1. Tạo một mảng có nhiều hình dạng [8,]
num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
array[[1, 2, 3, 4, 5, 6, 7, 8]]
Bước 2. Sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 với hình dạng mới là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
9np.reshape[num_array, [4,2]]
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
Như bạn có thể thấy hình dạng của mảng đầu vào đã được thay đổi thành [4,2]. Đây là mảng 2-D và chứa cùng dữ liệu có trong mảng 1-D đầu vào ban đầu
Định hình lại mảng 2D thành mảng 3D
Trong ví dụ này, bạn phải chuyển đổi mảng hình dạng 2 chiều [4,2] thành mảng hình dạng 3 chiều [2,2,2]
Bước 1. Tạo một mảng hình dạng có nhiều mảng [4,2]
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
1array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
Bước 2. Sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 với hình dạng mới là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
11array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
5array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
6Như bạn có thể thấy hình dạng của mảng đầu vào đã được thay đổi thành [2, 2, 2]. Đây là mảng 3-D và chứa cùng dữ liệu có trong mảng 2-D đầu vào ban đầu
2. Bạn có thể định hình lại mảng có nhiều mảng thành bất kỳ hình dạng nào không?
Hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 trả về mảng đã biến đổi với hình dạng mới được cung cấp trong hàm. Điều kiện duy nhất là số phần tử trong mảng ban đầu và số phần tử trong mảng đã chuyển đổi phải bằng nhauNếu bạn không biết cách tìm ra số phần tử trong một mảng, chỉ cần nhân số phần tử trên mỗi trục/chiều. Nó đơn giản có nghĩa là phép nhân của tất cả các số được đề cập trong bộ hình dạng
Nhận khóa học Python hoàn chỉnh miễn phí
Đối mặt với tình huống tương tự như những người khác?
Xây dựng sự nghiệp khoa học dữ liệu của bạn với bằng cấp được ngành công nhận trên toàn cầu. Có được tư duy, sự tự tin và các kỹ năng khiến Nhà khoa học dữ liệu trở nên có giá trị
Nhận khóa học Python hoàn chỉnh miễn phí
Xây dựng sự nghiệp khoa học dữ liệu của bạn với bằng cấp được ngành công nhận trên toàn cầu. Có được tư duy, sự tự tin và các kỹ năng khiến Nhà khoa học dữ liệu trở nên có giá trị
Hãy xem điều gì sẽ xảy ra nếu bạn cố định hình lại một mảng với các phần tử không bằng nhau
Bước 1. Tạo một mảng có nhiều hình dạng [5,]
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
8num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
0Bước 2. Sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 với hình dạng mới là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
14num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
1Trong trường hợp này, một ngoại lệ
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
15 được nêu ra. Vấn đề ở đây là mảng ban đầu có 5 phần tử. Nhưng hình dạng mới, được định nghĩa là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
14, mong đợi 2×5=10 phần tử. Có sự không phù hợp về số lượng phần tử và do đó, mã không thành côngNhưng nếu bạn muốn định hình lại một chiều không xác định thì sao?
Bạn có thể sử dụng -1 cho thứ nguyên không xác định
3. ý nghĩa của -1 trong numpy là gì. định hình lại?
Hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 hỗ trợ sử dụng hiệu quả các kích thước không xác định hoặc trình giữ chỗ array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
18Trong khi xác định hình dạng mới, bạn có thể đặt một trong các kích thước là không xác định. Numpy sẽ tự động suy ra kích thước phù hợp cho hình dạng cụ thể đó. Điều này là để đảm bảo rằng các mảng đầu vào và đầu ra có cùng số phần tử
Nó có thể hữu ích trong trường hợp không biết kích thước chính xác của mảng đầu vào nhưng một số kích thước đầu ra đã biết. Hãy xem một ví dụ trong đó kích thước mảng đầu vào không được biết nhưng bắt buộc phải có 2 hàng trong mảng đầu ra
Bước 1. Tạo một mảng numpy
num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
2____16Bước 2. Sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 với hình dạng mới là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
0num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
4num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
5Mảng đầu vào đã cho là mảng 3 chiều có hình dạng [2,2,2]
Vậy -1 trong [2, -1] nghĩa là gì?
-1 thông báo cho numpy tự động suy ra kích thước của trục đó. Vì vậy, khi áp dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 cho hình dạng array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
0, Numpy có thể tự động suy ra kích thước cuối cùng là 4Nhưng điều gì xảy ra nếu bạn thậm chí không đặt 1 vào thứ nguyên của mảng đầu ra và chỉ sử dụng -1 thay thế?
4. Làm phẳng các mảng
Đây là trường hợp sử dụng mở rộng của việc sử dụng các kích thước không xác định để định hình lại các mảng có nhiều mảng. Trình giữ chỗ kích thước không xác định
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
18 cho phép kích thước được suy ra tự động bằng numpy. Thủ thuật này có thể được sử dụng để làm phẳng một mảng. Nếu trình giữ chỗ array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
18 được đặt trong hàm array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7, thì hàm này sẽ trả về một mảng phẳng,Hãy xem một ví dụ dưới đây
Bước 1. Tạo một mảng numpy 3-D
num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
6array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
6Bước 2. Sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 với hình dạng mới là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
18num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
8num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
9Ở đây, mảng 3-D có hình dạng
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
8 được làm phẳng thành mảng 1-D5. Làm cách nào để thay đổi thứ tự của quá trình định hình lại numpy?
Ở mức độ trừu tượng, hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 hoạt động theo cách mà nó bắt đầu bằng một quá trình hủy kiểm soát hoặc làm phẳng. Đây là nơi tất cả các phần tử của mảng đầu vào được làm phẳng thành mảng 1-D và sau đó được cuộn lại hoặc định hình lại theo hình dạng đầu vào được cung cấp. Nhưng làm thế nào để numpy quyết định phần tử kích thước nào sẽ được làm phẳng trước và thứ tự các phần tử sẽ được đưa trở lại? Thứ tự hủy kiểm soát này có thể được kiểm soát bằng cách sử dụng tham số
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
50 trong hàm array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7. Tham số này có thể nhận 3 giá trị
52. Chỉ số thứ tự giống như Carray[[[1, 2], [3, 4], [5, 6], [7, 8]]]
53. Chỉ số đặt hàng kiểu Fortranarray[[[1, 2], [3, 4], [5, 6], [7, 8]]]
54. Theo thứ tự C hoặc theo thứ tự Fortranarray[[[1, 2], [3, 4], [5, 6], [7, 8]]]
Hãy thảo luận về từng người trong số họ
Chỉ số thứ tự giống như C
C ở đây là viết tắt của ngôn ngữ C và thứ tự này được gọi là chỉ mục thứ tự giống như C. Theo thứ tự này, chỉ số hoặc thứ nguyên cuối cùng của mảng thay đổi nhanh nhất và chỉ số đầu tiên thay đổi chậm nhất
Nói một cách đơn giản, việc hủy kiểm soát bắt đầu với các phần tử thứ nguyên cuối cùng và sau đó tiến tới các phần tử thứ nguyên đầu tiên. Thứ tự này cũng được duy trì cho quá trình khôi phục khi mảng đầu ra đang được tạo. Nó cũng là giá trị mặc định trong hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7Hãy xem một ví dụ dưới đây
Bước 1. Tạo một mảng numpy 2-D
Trong trường hợp này, hãy tạo một mảng đặc biệt. Các phần tử của mảng 2 chiều này sẽ tương ứng với số hàng và số cột tương ứng. Ví dụ: phần tử “R1C2” đại diện cho các phần tử ở hàng thứ 1 và cột thứ 2
array[[1, 2, 3, 4, 5, 6, 7, 8]]
0array[[1, 2, 3, 4, 5, 6, 7, 8]]
1Bước 2. Sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 với hình dạng mới là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
57 và đặt hàng array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
52array[[1, 2, 3, 4, 5, 6, 7, 8]]
2array[[1, 2, 3, 4, 5, 6, 7, 8]]
3Đầu ra ở trên chỉ ra rõ ràng rằng trong chiều cuối cùng của mảng 2-D đầu vào, các cột được làm phẳng trước. Các phần tử được làm phẳng theo thứ tự “R1C1”, “R1C2”, “R2C1”, v.v. Sau đó, trong quá trình định hình lại, “R1C1” được đặt ở hàng thứ nhất, cột thứ nhất, “R1C2” được đặt ở hàng thứ nhất, cột thứ 2 và “R2C1” được đặt ở hàng thứ nhất, cột thứ 3
“R2C1” được đặt theo cách sao cho hình dạng mảng đầu ra tương thích với hình dạng mảng đầu vào
Chỉ số đặt hàng kiểu Fortran
F ở đây là viết tắt của ngôn ngữ Fortran. Ở đây, chỉ mục hoặc thứ nguyên đầu tiên thay đổi nhanh nhất và chỉ mục tiếp theo thay đổi chậm nhất. Nói cách khác, quá trình hủy kiểm soát bắt đầu với chiều đầu tiên và sau đó nó tiến tới chiều cuối cùng. Thứ tự này cũng được duy trì cho quá trình khôi phục
Hãy xem một ví dụ dưới đây
Bước 1. Tạo một mảng numpy 2-D
array[[1, 2, 3, 4, 5, 6, 7, 8]]
4array[[1, 2, 3, 4, 5, 6, 7, 8]]
1Bước 2. Sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 với hình dạng mới là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
57 và đặt hàng array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
53array[[1, 2, 3, 4, 5, 6, 7, 8]]
6array[[1, 2, 3, 4, 5, 6, 7, 8]]
7Đầu ra ở trên mô tả rằng trong chiều đầu tiên của mảng 2-D đầu vào, các hàng được làm phẳng trước. Các phần tử được làm phẳng theo thứ tự “R1C1”, “R2C1”, “R3C1”, v.v. Sau đó, trong quá trình định hình lại, “R1C1” được đặt ở hàng thứ nhất, cột thứ nhất, “R2C1” được đặt ở hàng thứ 2, cột thứ nhất và “R3C1” được đặt ở hàng thứ nhất, cột thứ 2
“R3C1” được đặt theo cách sao cho hình dạng mảng đầu ra tương thích với hình dạng mảng đầu vào
một đơn đặt hàng
Loại lệnh này không có bất kỳ quy tắc cụ thể nào. Nó phụ thuộc vào cách mảng được lưu trữ trong bộ nhớ. Nếu mảng được lưu trữ trong bộ nhớ giống C, thì thứ tự
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
52 được sử dụng và nếu mảng được lưu trữ dưới dạng bộ nhớ giống Fortran, thì thứ tự array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
53 được sử dụng. Người dùng không biết kết quả đầu ra sẽ như thế nào và đó là lý do tại sao thứ tự này hiếm khi được sử dụng6. Các cách thay thế để định hình lại mảng
Mặc dù, một mảng có nhiều mảng có thể được định hình lại bằng cách sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7, nhưng có một số phương pháp thay thế. Hai phương pháp như vậy là- Hàm đối tượng mảng Numpy
- Sử dụng
65 kết hợp vớiarray[[[1, 2], [3, 4], [5, 6], [7, 8]]]
7array[[[1, 2], [3, 4], [5, 6], [7, 8]]]
Hãy khám phá những phương pháp này
Hàm đối tượng mảng Numpy để định hình lại mảng
Một đối tượng mảng có nhiều mảng hỗ trợ hầu hết tất cả các hoạt động có thể được thực hiện bằng cách sử dụng các hàm rõ ràng có nhiều mảng. Mảng có nhiều mảng có thể được định hình lại bằng cách truy cập hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
67 từ đối tượng mảng có nhiều mảng. Xem ví dụ bên dướiBước 1. Tạo một mảng có nhiều hình dạng [8,]
array[[1, 2, 3, 4, 5, 6, 7, 8]]
8num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
9Bước 2. Sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
67 từ đối tượng mảng có nhiều mảng với hình dạng mới là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
9np.reshape[num_array, [4,2]]
0array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
sử dụng np. ravel[] kết hợp với np. reshape[] để định hình lại mảng
Hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
65 được sử dụng để làm phẳng các mảng có nhiều mảng. Nó trả về mảng nhiều chiều dưới dạng một mảng liền kề được làm phẳng. Chức năng này có thể được sử dụng kết hợp với chức năng array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7. Kết quả của hàm ravel có thể được chuyển vào hàm định hình lại với hình dạng mới được xác định và nó vẫn trả về kết quả chính xácHãy xem một ví dụ
Bước 1. Tạo một mảng có nhiều hình dạng [8,]
array[[1, 2, 3, 4, 5, 6, 7, 8]]
8num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
9Bước 2. Sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 và array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
65 với hình dạng mới là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
9np.reshape[num_array, [4,2]]
4array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7. Định hình lại nâng cao
Một trong những cách khác để định hình lại mảng có nhiều mảng, như đã đề cập trong phần trên, là làm phẳng mảng bằng cách sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
65. Sau đó, sử dụng đầu ra của hàm ravel làm đầu vào cho hàm array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 cùng với hình dạng mới cho mảng đầu ra cuối cùngarray[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
65 cũng hỗ trợ tham số array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
50 và nó hoạt động tương tự như trong hàm array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7. Do đó, người ta có thể có một thứ tự khác để làm phẳng và định hình lại. Hãy thảo luận về những trường hợp nàyTrường hợp 1. Làm phẳng theo thứ tự C, định hình lại theo thứ tự F
Trong trường hợp này, mảng được làm phẳng bằng cách sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
65 cùng với tham số array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
50 array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
52. Đối với hàm array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7, tham số thứ tự sẽ là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
53Bước 1. Tạo một mảng có nhiều hình dạng [8,]
array[[1, 2, 3, 4, 5, 6, 7, 8]]
8num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
9Bước 2. Sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 và array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
65 với hình dạng mới là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
9np.reshape[num_array, [4,2]]
8np.reshape[num_array, [4,2]]
9Trường hợp 2. Làm phẳng theo thứ tự F, định hình lại theo thứ tự C
Trong trường hợp này, mảng được làm phẳng bằng cách sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
65 cùng với tham số array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
50 array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
53. Đối với hàm array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7, tham số thứ tự sẽ là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
52Bước 1. Tạo một mảng có nhiều hình dạng [8,]
array[[1, 2, 3, 4, 5, 6, 7, 8]]
8num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
9Bước 2. Sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
7 và array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
65 với hình dạng mới là array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
9_______02____08. Kiểm tra kiến thức của bạn
Q1. Điều gì sẽ xảy ra nếu một chỉ số âm được truyền trong bộ hình dạng?
Câu trả lờiCâu trả lời. NumPy sẽ tự động suy ra -1 là thứ nguyên bị thiếu và chọn thứ nguyên chính xác của chính nó
quý 2. Sự khác biệt giữa thứ tự 'C' và 'F' là gì?
Câu trả lờiCâu trả lời. Theo thứ tự 'C', chỉ số hoặc thứ nguyên cuối cùng của mảng thay đổi nhanh nhất và chỉ số đầu tiên thay đổi chậm nhất. Nhưng theo thứ tự 'F', chỉ số hoặc thứ nguyên đầu tiên thay đổi nhanh nhất và chỉ mục tiếp theo thay đổi chậm nhất
Q3. Liệt kê hai cách để làm phẳng một mảng có nhiều mảng
Câu trả lờiCâu trả lời
1] Sử dụng hàm
array[[[1, 2],
[3, 4],
[5, 6],
[7, 8]]]
652] Sử dụng trình giữ chỗ kích thước không xác định
num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
17 trong hàm num_array = np.array[[1,2,3,4,5,6,7,8]]
num_array
18Bài viết được đóng góp bởi Kaustubh G
MáyHọcPlus
Machine Learning Plus được tạo thành từ một nhóm những người nhiệt tình đam mê Khoa học dữ liệu. Họ giúp các Nhà phát triển, Nhà quản lý doanh nghiệp và Nhà khoa học dữ liệu tuyệt vời trở nên giỏi hơn trong công việc của họ