# 📋 Ma trận và cách chuyển bảng dữ liệu thành ma trận

By Better Wise

Nhắc lại nhanh từ Module 1: vector là một danh sách số có thứ tự, ví dụ $\vec{v} = (8, 7, 9)$ là điểm của một bạn ở ba môn. Giờ tôi vẽ thêm hai bạn nữa lên bảng và xếp ba vector thành ba dòng, thế là bạn vừa có một ma trận. Gần như mọi bảng dữ liệu bạn từng thấy (bảng điểm, bảng rating phim, lịch sử mua hàng) đều đang giấu một ma trận bên trong như vậy.

Sau bài này, bạn sẽ:

- Đọc và viết đúng kích thước ma trận dạng **m × n**
- Phân biệt **hàng** (một mẫu dữ liệu) và **cột** (một thuộc tính)
- Chuyển một bảng dữ liệu thực tế thành ma trận, biết bỏ hoặc mã hóa cột chữ
- Nhận ra vector hàng, vector cột, ma trận vuông khi gặp chúng

## Ma trận là gì: một lưới số có kích thước hàng × cột

Tôi vẽ lên bảng bảng điểm của ba bạn ở ba môn:

| | Toán | Lý | Hóa |
| --- | --- | --- | --- |
| An | 8 | 7 | 9 |
| Bình | 6 | 9 | 7 |
| Chi | 9 | 8 | 8 |

Bỏ phần chữ đi, chỉ giữ lại lưới số, ta được ma trận $A$:

$$
A = \begin{bmatrix} 8 & 7 & 9 \\ 6 & 9 & 7 \\ 9 & 8 & 8 \end{bmatrix}
$$

Ma trận này có **3 hàng** và **3 cột**, nên kích thước là 3 × 3. Quy ước đọc luôn là **hàng trước, cột sau**, giống như đọc tọa độ (x, y) chứ không phải (y, x).

Một ma trận kích thước m × n có _____ hàng và _____ cột. Phần tử nằm ở hàng thứ i, cột thứ j được ký hiệu là $a_{ij}$, tức là nó nằm ở hàng _____ và cột _____.

Với ma trận $A$ ở trên: $a_{23} = 7$ (hàng 2 là Bình, cột 3 là Hóa), còn $a_{31} = 9$ (hàng 3 là Chi, cột 1 là Toán).

```mermaid
flowchart TD
    T["📋<br/>Bảng dữ liệu"] --> R["➡️<br/>Mỗi dòng thành một hàng"]
    T --> C["⬇️<br/>Mỗi cột số thành một cột"]
    R --> M["🔢<br/>Ma trận m × n"]
    C --> M
```

**Bài tập nhanh 1.** Một bảng điểm có 5 sinh viên và 4 môn học (Toán, Lý, Hóa, Sinh). Bỏ cột tên sinh viên đi thì ma trận thu được có kích thước bao nhiêu? Phần tử $a_{42}$ là gì?

**Xem đáp án**

Kích thước 5 × 4 (5 hàng, 4 cột). $a_{42}$ nằm ở hàng 4 (sinh viên thứ tư) và cột 2 (môn Lý), tức là điểm môn Lý của sinh viên thứ tư. Lưu ý: hàng 4 không phải "sinh viên có mã 4" mà là sinh viên đứng thứ tư trong bảng.

## Hàng là mẫu, cột là thuộc tính

Đây là quy ước quan trọng nhất của bài này: **mỗi hàng là một mẫu, mỗi cột là một thuộc tính**. Ma trận rating phim có 4 người dùng và 5 bộ phim thì là ma trận 4 × 5: mỗi hàng là một người, mỗi cột là một bộ phim, và ô $(i, j)$ là điểm người $i$ chấm cho phim $j$.

Ví dụ một bảng sản phẩm:

| Sản phẩm | Giá (nghìn đồng) | Lượt xem | Đánh giá |
| --- | --- | --- | --- |
| Áo thun | 150 | 1200 | 4.5 |
| Quần jean | 450 | 800 | 4.2 |
| Giày | 700 | 300 | 4.8 |

Cột "Sản phẩm" là chữ nên bị bỏ ra khỏi ma trận. Còn lại 3 cột số, mỗi sản phẩm một hàng:

$$
M = \begin{bmatrix} 150 & 1200 & 4.5 \\ 450 & 800 & 4.2 \\ 700 & 300 & 4.8 \end{bmatrix}
$$

Kích thước 3 × 3, và $m_{31} = 700$ (giá của chiếc giày). Nếu sau này bạn chuyển vị ma trận, vai trò hàng và cột sẽ đổi chỗ cho nhau, nhưng đó là nội dung của bài thứ ba trong module này.

**Bài tập nhanh 2.** Một bảng ghi rating của 4 người dùng cho 5 bộ phim, mỗi ô là một số từ 1 đến 5. Ma trận tương ứng có kích thước bao nhiêu? Hàng thứ 3 của ma trận chứa thông tin gì?

**Xem đáp án**

Kích thước 4 × 5. Hàng thứ 3 chứa 5 con số rating mà người dùng thứ ba đã chấm cho 5 bộ phim, theo đúng thứ tự cột. Nếu đọc nhầm thành 5 × 4 thì bạn đã đảo vai trò người dùng và phim.

## Bốn bước chuyển bảng dữ liệu thành ma trận

1. Chọn đối tượng: mỗi dòng của bảng (một người, một sản phẩm, một tài liệu) sẽ thành một hàng của ma trận.
2. Chọn thuộc tính số: mỗi cột chứa số sẽ thành một cột của ma trận, giữ nguyên thứ tự cột trong bảng.
3. Xử lý cột chữ: bỏ hẳn cột tên/nhãn, hoặc mã hóa nhãn thành số (ví dụ 0 và 1) nếu cần giữ thông tin đó.
4. Ghi kích thước và đếm lại: số hàng bằng số dòng dữ liệu, số cột bằng số thuộc tính số.

Làm trọn vẹn với bảng sản phẩm ở trên: 3 dòng dữ liệu nên 3 hàng, 3 cột số nên 3 cột. Bỏ cột "Sản phẩm". Kết quả là ma trận 3 × 3 như đã viết.

> **Important:** 
> Mọi phần tử trong ma trận dữ liệu phải là số. Nếu một cột là chữ ("Hà Nội", "Đà Nẵng") thì bạn phải bỏ hoặc mã hóa trước khi đưa vào ma trận, vì các phép cộng, nhân và tính khoảng cách ở các bài sau chỉ có nghĩa với số.

**Bài tập nhanh 3.** Chuyển bảng sau thành ma trận và cho biết kích thước:

| Tài liệu | "vector" | "ma trận" |
| --- | --- | --- |
| A | 5 | 1 |
| B | 2 | 6 |
| C | 0 | 4 |

**Xem đáp án**

Cột "Tài liệu" là nhãn chữ nên bỏ. Còn lại ma trận 3 × 2:

$$
\begin{bmatrix} 5 & 1 \\ 2 & 6 \\ 0 & 4 \end{bmatrix}
$$

Hàng 1 là tài liệu A (5 lần "vector", 1 lần "ma trận"), hàng 3 là tài liệu C (0 lần "vector", 4 lần "ma trận"). Ma trận này rất giống bảng tần số từ khóa mà bài về cosine similarity ở Module 3 sẽ dùng lại.

## Bốn dạng ma trận bạn sẽ gặp ngay

| Dạng | Kích thước | Ví dụ |
| --- | --- | --- |
| Vector hàng | 1 × n | điểm của một bạn ở ba môn: 8 7 9 |
| Vector cột | m × 1 | một cột dọc gồm 8, 7, 9 |
| Ma trận vuông | n × n | ma trận điểm 3 bạn × 3 môn |
| Ma trận không | m × n | mọi phần tử đều bằng 0 |

Điểm hay bị nhầm: một vector hàng 1 × n và một vector cột n × 1 chứa cùng các con số nhưng **không** phải cùng một ma trận, vì kích thước khác nhau. Khi cần, ta dùng chuyển vị để đổi dạng này sang dạng kia.

Vector hàng có kích thước _____, còn vector cột có kích thước _____. Ma trận vuông là ma trận có số hàng _____ số cột.

## Ba cái bẫy khi đọc kích thước ma trận

- **Đọc ngược hàng và cột.** Ma trận 5 × 3 là 5 hàng, 3 cột. Cách kiểm tra: hàng là thứ chạy *xuống*, cột là thứ chạy *ngang*.
- **Đếm luôn dòng tiêu đề.** Dòng ghi tên cột không phải một hàng dữ liệu, đừng cộng nó vào m.
- **Để sót cột chữ.** Ma trận có một ô là chữ thì không cộng trừ nhân chia được nữa. Trước khi viết ma trận, hãy quét từng cột và tự hỏi: cột này toàn số chưa?
- Mẹo kiểm tra cuối cùng: số phần tử phải bằng m × n. Ma trận 3 × 4 mà bạn đếm được 11 số thì chắc chắn đã sai ở đâu đó.

## Chốt lại và sang bài nhân ma trận

- Ma trận là một lưới số, kích thước đọc là **hàng × cột**.
- Phần tử $a_{ij}$ nằm ở hàng i, cột j.
- Khi chuyển bảng dữ liệu: mỗi dòng thành một hàng (một mẫu), mỗi cột số thành một cột (một thuộc tính), cột chữ thì bỏ hoặc mã hóa.
- Vector hàng 1 × n, vector cột m × 1, ma trận vuông n × n, ma trận không toàn số 0.

Bài tiếp theo, "Nhân ma trận từng bước", sẽ lấy đúng những ma trận bạn vừa dựng và cho chúng tác động lên vector: xoay, co, giãn không gian, từng bước một.

Front: Ma trận kích thước m × n có bao nhiêu hàng và bao nhiêu cột?
Back: m hàng và n cột, đọc hàng trước rồi mới đến cột.

Front: Phần tử a_ij nằm ở vị trí nào?
Back: Hàng thứ i, cột thứ j.

Front: Ma trận 3 × 5 có bao nhiêu phần tử?
Back: 15 phần tử, vì 3 × 5 = 15.

Front: Vector hàng là ma trận có kích thước bao nhiêu?
Back: 1 × n, tức một hàng và n cột.

Front: Vector cột là ma trận có kích thước bao nhiêu?
Back: m × 1, tức m hàng và một cột.

Front: Ma trận vuông là gì?
Back: Ma trận có số hàng bằng số cột, tức kích thước n × n.

Front: Ma trận không là gì?
Back: Ma trận mà mọi phần tử đều bằng 0.

Front: Khi chuyển một bảng dữ liệu thành ma trận, mỗi dòng dữ liệu trở thành gì?
Back: Một hàng của ma trận, đại diện cho một mẫu quan sát.

Front: Mỗi cột số trong bảng trở thành gì?
Back: Một cột của ma trận, đại diện cho một thuộc tính (feature).

Front: Dòng tiêu đề của bảng có được tính là một hàng dữ liệu không?
Back: Không, tiêu đề chỉ là tên cột, không cộng vào số hàng m.

Front: Nếu một cột trong bảng chứa chữ, ví dụ tên thành phố, thì xử lý thế nào?
Back: Bỏ cột đó ra hoặc mã hóa thành số (ví dụ one-hot) trước khi đưa vào ma trận.

Front: Cách kiểm tra nhanh một ma trận m × n có đủ phần tử chưa?
Back: Đếm số phần tử, phải đúng bằng m × n.

Front: Ma trận 5 × 3 đọc như thế nào?
Back: 5 hàng và 3 cột.

Front: Bảng có 4 dòng dữ liệu và 3 cột số thì thành ma trận kích thước nào?
Back: 4 × 3, tức 4 hàng và 3 cột.

Trước khi gấp máy lại, thử tự nhắc bằng vài câu điền khuyết:

Ma trận kích thước m × n có _____ hàng và _____ cột.
Phần tử a_ij nằm ở hàng thứ _____ và cột thứ _____.
Một bảng có 6 dòng dữ liệu và 4 cột số sẽ thành ma trận kích thước _____.

---

## Contents

Part of [🧮 Khóa 2: Toán cho Machine Learning — vector, ma trận và khoảng cách bằng hình ảnh](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh.md)

- **➡️ Vector, cộng và nhân vô hướng, tích vô hướng và góc**
  - [🧭 Vector là gì: biểu diễn và tọa độ](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh/vector-la-gi-bieu-dien-va-toa-do.md)
  - [➕ Cộng vector và nhân vô hướng](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh/cong-vector-va-nhan-vo-huong.md) (sign-in required)
  - [📐 Tích vô hướng và góc giữa hai vector](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh/tich-vo-huong-va-goc-giua-hai-vector.md)
  - [✅ Checkpoint: Vector và góc](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh/checkpoint-vector-va-goc.md)
- **🔲 Ma trận, nhân ma trận từng bước, chuyển vị và biến đổi tuyến tính**
  - [📋 Ma trận và cách chuyển bảng dữ liệu thành ma trận](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh/ma-tran-va-chuyen-bang-du-lieu-thanh-ma-tran.md) — this lesson
  - [✖️ Nhân ma trận từng bước](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh/nhan-ma-tran-tung-buoc.md)
  - [🔄 Chuyển vị và biến đổi tuyến tính nhìn bằng hình ảnh](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh/chuyen-vi-va-bien-doi-tuyen-tinh-bang-hinh-anh.md)
  - [🧪 Checkpoint: Ma trận và biến đổi](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh/checkpoint-ma-tran-va-bien-doi.md)
- **📏 Chuẩn L1/L2 và khoảng cách cosine trong tìm kiếm, gợi ý**
  - [📶 Chuẩn L1, L2 và ý nghĩa hình học](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh/chuan-l1-l2-va-y-nghia-hinh-hoc.md)
  - [🔍 Cosine similarity trong tìm kiếm và gợi ý](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh/cosine-similarity-trong-tim-kiem-va-goi-y.md)
  - [🏁 Checkpoint: Chuẩn và độ tương đồng](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh/checkpoint-chuan-va-do-tuong-dong.md)
- [Course cheatsheet](https://everwise.study/courses/khoa-2-toan-cho-machine-learning-vector-ma-tran-va-khoang-cach-bang-hinh/cheatsheet.md) (premium content)
