Ma trận cột Python
Dữ liệu trong mảng NumPy có thể được truy cập trực tiếp thông qua chỉ mục cột và hàng và điều này khá đơn giản. Tuy nhiên, đôi khi chúng ta phải thực hiện các thao tác trên các mảng dữ liệu như tổng hoặc giá trị trung bình của các giá trị theo hàng hoặc cột và điều này yêu cầu phải chỉ định trục của thao tác Show Thật không may, các thao tác theo cột và theo hàng trên mảng NumPy không khớp với trực giác của chúng tôi thu được từ việc lập chỉ mục theo hàng và cột và điều này có thể gây nhầm lẫn cho người mới bắt đầu cũng như những người thực hành máy học dày dặn. Cụ thể, các hoạt động như tính tổng có thể được thực hiện theo cột bằng cách sử dụng axis=0 và theo hàng bằng cách sử dụng axis=1 Trong hướng dẫn này, bạn sẽ khám phá cách truy cập và thao tác trên mảng NumPy theo hàng và theo cột Sau khi hoàn thành hướng dẫn này, bạn sẽ biết
Bắt đầu nào Cách đặt trục NumPy cho hàng và cột trong Python Hướng dẫn tổng quanHướng dẫn này được chia thành ba phần;
Mảng NumPy có hàng và cộtTrước khi chúng ta đi sâu vào trục mảng NumPy, hãy làm mới kiến thức của chúng ta về mảng NumPy Thông thường trong Python, chúng tôi làm việc với danh sách số hoặc danh sách danh sách số. Ví dụ, chúng ta có thể định nghĩa một ma trận hai chiều gồm hai hàng ba số dưới dạng một danh sách các số như sau 1 2 3 .. . # xác định dữ liệu dưới dạng danh sách dữ liệu = [[1,2,3], [4,5,6]] Một mảng NumPy cho phép chúng ta xác định và vận hành dựa trên các vectơ và ma trận của các số một cách hiệu quả, chẳng hạn như. g. hiệu quả hơn rất nhiều so với danh sách Python đơn giản. Mảng NumPy được gọi là NDArray và có thể có hầu như bất kỳ số lượng kích thước nào, mặc dù, trong học máy, chúng ta thường làm việc với mảng 1D và 2D (hoặc mảng 3D cho hình ảnh) Ví dụ: chúng ta có thể chuyển đổi danh sách ma trận danh sách thành mảng NumPy thông qua hàm asarray() 1 2 3 .. . # chuyển đổi thành một mảng có nhiều mảng dữ liệu = sự sắp xếp(dữ liệu) Chúng ta có thể in mảng trực tiếp và mong muốn thấy hai hàng số, trong đó mỗi hàng có ba số hoặc cột 1 2 3 .. . # tóm tắt nội dung mảng in(dữ liệu) Chúng ta có thể tóm tắt số chiều của một mảng bằng cách in thuộc tính “shape”, là một bộ, trong đó số lượng giá trị trong bộ xác định số lượng kích thước và số nguyên ở mỗi vị trí xác định kích thước của kích thước Ví dụ: chúng tôi mong muốn hình dạng của mảng là (2,3) cho hai hàng và ba cột 1 2 3 .. . # tóm tắt hình dạng mảng in(dữ liệu. hình dạng) Liên kết tất cả những điều này lại với nhau, một ví dụ hoàn chỉnh được liệt kê bên dưới 1 2 3 4 5 6 7 8 9 10 # tạo và tóm tắt một mảng có nhiều mảng từ numpy nhập asarray # xác định dữ liệu dưới dạng danh sách dữ liệu = [[1,2,3], [4,5,6]] # chuyển đổi thành một mảng có nhiều mảng dữ liệu = sự sắp xếp(dữ liệu) # tóm tắt nội dung mảng in(dữ liệu) # tóm tắt hình dạng mảng in(dữ liệu. hình dạng) Chạy ví dụ xác định dữ liệu của chúng tôi là một danh sách các danh sách, chuyển đổi nó thành một mảng NumPy, sau đó in dữ liệu và hình dạng Chúng ta có thể thấy rằng khi mảng được in ra, nó có hình dạng mong muốn là hai hàng ba cột. Sau đó, chúng tôi có thể thấy rằng hình in phù hợp với mong đợi của chúng tôi 1 2 3 [[1 2 3] [4 5 6]] (2, 3) Để biết thêm thông tin cơ bản về mảng NumPy, hãy xem hướng dẫn
Càng xa càng tốt Nhưng làm thế nào để chúng ta truy cập dữ liệu trong mảng theo hàng hoặc cột? Hãy xem xét kỹ hơn những câu hỏi này Hàng và cột dữ liệu trong mảng NumPyThuộc tính "hình dạng" tóm tắt kích thước của dữ liệu của chúng tôi Điều quan trọng, thứ nguyên đầu tiên xác định số lượng hàng và thứ nguyên thứ hai xác định số lượng cột. Ví dụ (2,3) xác định một mảng có hai hàng và ba cột, như chúng ta đã thấy trong phần trước Chúng ta có thể liệt kê từng hàng dữ liệu trong một mảng bằng cách liệt kê từ chỉ số 0 đến chiều đầu tiên của hình dạng mảng, e. g. hình dạng[0]. Ta có thể truy cập dữ liệu trong mảng thông qua chỉ số hàng và chỉ số cột Ví dụ: data[0, 0] là giá trị ở hàng đầu tiên và cột đầu tiên, trong khi data[0,. ] là các giá trị trong hàng đầu tiên và tất cả các cột, e. g. hàng đầu tiên hoàn chỉnh trong ma trận của chúng tôi Ví dụ dưới đây liệt kê tất cả các hàng trong dữ liệu và in lần lượt từng hàng 1 2 3 4 5 6 7 8 9 # liệt kê các hàng trong một mảng gọn gàng từ numpy nhập asarray # xác định dữ liệu dưới dạng danh sách dữ liệu = [[1,2,3], [4,5,6]] # chuyển đổi thành một mảng có nhiều mảng dữ liệu = sự sắp xếp(dữ liệu) # bước qua các hàng cho hàng trong phạm vi(data.hình dạng[0]) . : in(dữ liệu[hàng, :]) Như mong đợi, kết quả hiển thị hàng dữ liệu đầu tiên, sau đó là hàng dữ liệu thứ hai 1 2 [1 2 3] [4 5 6] Chúng ta có thể đạt được hiệu ứng tương tự cho các cột Tức là chúng ta có thể liệt kê dữ liệu theo cột. Ví dụ: dữ liệu [. , 0] truy cập tất cả các hàng cho cột đầu tiên. Chúng ta có thể liệt kê tất cả các cột từ cột 0 đến cột cuối cùng được xác định bởi thứ nguyên thứ hai của thuộc tính “hình dạng”, e. g. hình dạng[1] Ví dụ dưới đây chứng minh điều này bằng cách liệt kê tất cả các cột trong ma trận của chúng tôi 1 2 3 4 5 6 7 8 9 # liệt kê các cột trong một mảng gọn gàng từ numpy nhập asarray # xác định dữ liệu dưới dạng danh sách dữ liệu = [[1,2,3], [4,5,6]] # chuyển đổi thành một mảng có nhiều mảng dữ liệu = sự sắp xếp(dữ liệu) # bước qua các cột cho col trong phạm vi(data.hình dạng[1]) . : in(dữ liệu[. , col]) Chạy ví dụ liệt kê và in từng cột trong ma trận Cho rằng ma trận có ba cột, chúng ta có thể thấy rằng kết quả là chúng ta in ba cột, mỗi cột dưới dạng một vectơ một chiều. Đó là cột 1 (chỉ mục 0) có giá trị 1 và 4, cột 2 (chỉ mục 1) có giá trị 2 và 5 và cột 3 (chỉ mục 2) có giá trị 3 và 6 Nó chỉ trông buồn cười vì các cột của chúng ta trông không giống các cột; 1 2 3 [1 4] [2 5] [3 6] Bây giờ chúng ta biết cách truy cập dữ liệu trong một mảng có nhiều mảng theo cột và theo hàng Cho đến nay, rất tốt, nhưng còn các thao tác trên mảng theo cột và mảng thì sao? Hoạt động mảng NumPy theo hàng và cộtChúng ta thường cần thực hiện các thao tác trên mảng NumPy theo cột hoặc theo hàng Ví dụ: chúng ta có thể cần tính tổng các giá trị hoặc tính giá trị trung bình cho một ma trận dữ liệu theo hàng hoặc theo cột Điều này có thể đạt được bằng cách sử dụng hàm sum() hoặc mean() NumPy và chỉ định "trục" để thực hiện thao tác Chúng ta có thể chỉ định trục là thứ nguyên mà thao tác sẽ được thực hiện và thứ nguyên này không khớp với trực giác của chúng ta dựa trên cách chúng ta diễn giải “hình dạng” của mảng và cách chúng ta lập chỉ mục dữ liệu trong mảng Như vậy, điều này gây ra sự nhầm lẫn tối đa cho người mới bắt đầu Nghĩa là, axis=0 sẽ thực hiện thao tác theo cột và axis=1 sẽ thực hiện thao tác theo hàng. Chúng ta cũng có thể chỉ định trục là Không có, trục này sẽ thực hiện thao tác cho toàn bộ mảng Tóm tắt
Hãy làm cho điều này cụ thể với một ví dụ đã làm việc Chúng tôi sẽ tính tổng các giá trị trong mảng của chúng tôi theo từng trục trong số ba trục Hoạt động Axis=None Array-WiseĐặt axis=None khi thực hiện thao tác trên mảng NumPy sẽ thực hiện thao tác cho toàn bộ mảng Đây thường là giá trị mặc định cho hầu hết các hoạt động, chẳng hạn như tổng, giá trị trung bình, tiêu chuẩn, v.v. 1 2 3 .. . # tính tổng dữ liệu theo mảng kết quả = dữ liệu. tổng(trục=Không) Ví dụ dưới đây minh họa tính tổng tất cả các giá trị trong một mảng, e. g. một hoạt động khôn ngoan mảng 1 2 3 4 5 6 7 8 9 10 11 12 # tính tổng các giá trị theo mảng từ numpy nhập asarray # xác định dữ liệu dưới dạng danh sách dữ liệu = [[1,2,3], [4,5,6]] # chuyển đổi thành một mảng có nhiều mảng dữ liệu = sự sắp xếp(dữ liệu) # tóm tắt nội dung mảng in(dữ liệu) # tính tổng dữ liệu theo mảng kết quả = dữ liệu. tổng(trục=Không) # tóm tắt kết quả in(kết quả) Chạy ví dụ đầu tiên in mảng, sau đó thực hiện phép tính tổng theo mảng và in kết quả Chúng ta có thể thấy mảng có sáu giá trị có tổng bằng 21 nếu chúng ta thêm chúng theo cách thủ công và kết quả của phép tính tổng được thực hiện theo mảng phù hợp với kỳ vọng này 1 2 3 4 [[1 2 3] [4 5 6]]
21 Axis=0 Hoạt động theo cộtĐặt axis=0 khi thực hiện thao tác trên mảng NumPy sẽ thực hiện thao tác theo cột, nghĩa là trên tất cả các hàng cho mỗi cột 1 2 3 .. . # tính tổng dữ liệu theo cột kết quả = dữ liệu. tổng(trục=0) Ví dụ: với dữ liệu của chúng tôi có hai hàng và ba cột 1 2 Dữ liệu = [[1, 2, 3], 4, 5, 6]] Chúng tôi mong đợi tổng theo cột với axis=0 sẽ dẫn đến ba giá trị, một giá trị cho mỗi cột, như sau
Ví dụ dưới đây minh họa tổng các giá trị trong mảng theo cột, e. g. một hoạt động theo cột 1 2 3 4 5 6 7 8 9 10 11 12 # tổng giá trị theo cột từ numpy nhập asarray # xác định dữ liệu dưới dạng danh sách dữ liệu = [[1,2,3], [4,5,6]] # chuyển đổi thành một mảng có nhiều mảng dữ liệu = sự sắp xếp(dữ liệu) # tóm tắt nội dung mảng in(dữ liệu) # tính tổng dữ liệu theo cột kết quả = dữ liệu. tổng(trục=0) # tóm tắt kết quả in(kết quả) Chạy ví dụ đầu tiên in mảng, sau đó thực hiện phép tính tổng theo cột và in kết quả Chúng ta có thể thấy mảng có sáu giá trị với hai hàng và ba cột như mong đợi; 1 2 3 [[1 2 3] [4 5 6]] [5 7 9] Axis=1 Row-Wise OperationĐặt axis=1 khi thực hiện thao tác trên mảng NumPy sẽ thực hiện thao tác theo hàng, nghĩa là trên tất cả các cột cho mỗi hàng 1 2 3 .. . # tính tổng dữ liệu theo hàng kết quả = dữ liệu. tổng(trục=1) Ví dụ: với dữ liệu của chúng tôi có hai hàng và ba cột 1 2 Dữ liệu = [[1, 2, 3], 4, 5, 6]] Chúng tôi mong đợi một tổng theo hàng với axis=1 sẽ dẫn đến hai giá trị, một giá trị cho mỗi hàng, như sau
Ví dụ dưới đây minh họa tổng các giá trị trong mảng theo hàng, e. g. một hoạt động khôn ngoan hàng 1 2 3 4 5 6 7 8 9 10 11 12 # tổng giá trị theo hàng từ numpy nhập asarray # xác định dữ liệu dưới dạng danh sách dữ liệu = [[1,2,3], [4,5,6]] # chuyển đổi thành một mảng có nhiều mảng dữ liệu = sự sắp xếp(dữ liệu) # tóm tắt nội dung mảng in(dữ liệu) # tính tổng dữ liệu theo hàng kết quả = dữ liệu. tổng(trục=1) # tóm tắt kết quả in(kết quả) Chạy ví dụ đầu tiên in mảng, sau đó thực hiện thao tác tính tổng theo hàng và in kết quả Chúng ta có thể thấy mảng có sáu giá trị với hai hàng và ba cột như mong đợi; 1 2 3 [[1 2 3] [4 5 6]] [ 6 15] Bây giờ chúng tôi có một ý tưởng cụ thể về cách đặt trục thích hợp khi thực hiện các thao tác trên mảng NumPy của chúng tôi '@' nghĩa là gì trong ma trận Python?Trong NumPy, toán tử @ có nghĩa là phép nhân ma trận . Chẳng hạn, hãy nhân hai mảng NumPy đại diện cho ma trận 2 x 2. nhập numpy dưới dạng np. một = np. mảng([[1, 2], [3, 4]])
Một cột trong ma trận với các ví dụ là gì?Ma trận cột là một loại ma trận chỉ có một cột . Thứ tự của ma trận cột được biểu diễn bằng m x 1, do đó các hàng sẽ có các phần tử đơn lẻ, được sắp xếp theo cách chúng đại diện cho một cột các phần tử. Hàng và cột trong ma trận chứa các phần tử. |