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

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

  • Cách xác định mảng NumPy với các hàng và cột dữ liệu
  • Cách truy cập các giá trị trong mảng NumPy theo chỉ mục hàng và cột
  • Cách thực hiện các thao tác trên mảng NumPy theo trục hàng và cột

Bắt đầu nào

Ma trận cột Python

Cách đặt trục NumPy cho hàng và cột trong Python
Ảnh của Jonathan Cutrer, bảo lưu một số quyền.

Hướng dẫn tổng quan

Hướng dẫn này được chia thành ba phần;

  1. Mảng NumPy có hàng và cột
  2. Hàng và cột dữ liệu trong mảng NumPy
  3. Hoạt động mảng NumPy theo hàng và cột
    1. Hoạt động Axis=None Array-Wise
    2. Axis=0 Hoạt động theo cột
    3. Axis=1 Row-Wise Operation

Mảng NumPy có hàng và cột

Trướ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

  • Giới thiệu nhẹ nhàng về mảng NumPy trong Python

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 NumPy

Thuộ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ột

Chú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

  • trục=Không có. Áp dụng thao tác theo mảng
  • trục=0. Áp dụng thao tác theo cột, trên tất cả các hàng cho mỗi cột
  • trục=1. Áp dụng thao tác theo hàng, trên tất cả các cột cho mỗi hàng

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

  • Cột 1. 1 + 4 = 5
  • Cột 2. 2 + 5 = 7
  • Cột 3. 3 + 6 = 9

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

  • Hàng 1. 1 + 2 + 3 = 6
  • Hàng 2. 4 + 5 + 6 = 15

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ử.