You are on page 1of 30

9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Học nhanh Python trong 30 phút


Bởi Nguyễn Văn Hiếu -

Thông báo: Lập Trình Không Khó đổi miền từ


nguyenvanhieu.vn sang blog.luyencode.net.

Bài hướng dẫn Học nhanh Python trong 30 phút này


được dịch lại từ Python Numpy Tutorial thuộc khóa học lập
trình python của đại học StanFord. Nếu bạn có khả năng
90/ 100
đọc hiểu tiếng anh, tôi khuyên bạn nên đọc bài viết gốc
để có cái nhìn sâu sắc nhất.

Chú ý: Trong bài viết còn nhiều keyword mình chưa biết phải dịch như
nào(để nguyên tiếng anh) và một số mục có thể chưa sát nghĩa(để cả
tiếng việt và tiếng anh). Mình rất cần các bạn giúp đỡ mình dịch các
keyword này giúp mình. Các bạn hãy comment cách dịch tại mục bình
luận giúp mình ạ. Rất cảm ơn các bạn!

NỘI DUNG BÀI VIẾT 

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 1/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

1. Giới thiệu về khóa học lập trình python


2. Python là gì?
2.1. Các phiên bản Python
2.2. Các kiểu dữ liệu cơ bản trong Python
2.3. Containers
2.3.1. Lists
2.3.2. Dictionaries
2.3.3. Sets
2.3.4. Tuples
2.4. Functions
2.5. Classes
3. Numpy
3.1. Arrays
3.2. Truy xuất mảng(Array indexing)
3.3. Kiểu dữ liệu
3.4. Phép toán trên numpy array
3.5. Broadcasting
3.5.1. Nguyên tắc
3.6. Tài liệu về Numpy
4. SciPy
4.1. Scipy trong xử lý ảnh (Image operations)
4.2. MATLAB files
4.3. Khoảng cách giữa các điểm
5. Matplotlib
5.1. Vẽ đồ thị
5.2. Đồ thị con (Subplots)
5.3. Hình ảnh
6. Tổng kết khóa học lập trình python

Giới thiệu về khóa học lập trình python


khóa học lập trình python này được viết dành cho các bạn sử dụng
python cho các bài toán machine learning. Do đó, ngoài hướng dẫn về
học lập trình python ra bạn sẽ học được các kỹ thuật, cách sử dụng một
số thư viện phục vụ cho khoa học máy tính.

Nếu bạn chỉ đơn giản muốn học lập trình python, bạn vẫn có thể tham
khảo5 phần hướng dẫn về ngôn ngữ python của khóa học lập trình python
này để hiểu tổng quan. Ngược lại, nếu bạn là người mới học lập trình
và muốn học chi tiết cụ thể nhất về ngôn ngữ python, tôi khuyên bạn
nên xem qua khóa học này sẽ phù hợp hơn.

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 2/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Python là một ngôn ngữ lập trình tuyệt vời có thể sử dụng trong nhiều
lĩnh vực và nhiều bài toán khác nhau. Với sự trợ giúp đắc lực của nhiều
thư viện như numpy, scipy, matplotlib,… Nó trở thành một môi trường lý
tưởng và mạnh mẽ của khoa học máy tính.

Chúng tôi vẫn hi vọng rằng các bạn đã có một số kinh nghiệm làm việc
với python và numpy. Tuy nhiên, nếu bạn chưa có nhiều kinh nghiệm thì
cũng không cần quá lo lắng. Khóa học lập trình python này sẽ cung cấp
cho bạn một khóa học nhanh về ngôn ngữ lập trình python và sử dụng
python trong trong khoa học máy tính.

Toàn bộ source code của khóa học lập trình python này cũng sẽ có ở bản
jupyter notebook tại đây.

Trong quá trình học, tôi mong muốn các bạn tự gõ các ví dụ và tự mình
kiểm chứng kết quả. Điều này sẽ giúp bạn học tốt hơn rất nhiều.

Python là gì?
Python là một ngôn ngữ lập trình bậc cao, python hoàn toàn tạo kiểu
động và dùng cơ chế cấp phát bộ nhớ tự động. Đây là ngôn ngữ có hình
thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập
trình. Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với
số lần gõ phím tối thiểu. Đây là một ví dụ triển khai thuật toán tìm kiếm
nhanh – quick sort sử dụng python:

0  
1 def quicksort(arr):
2     if len(arr) <= 1:
3         return
5 arr
4     pivot = arr[len(arr) // 2]
5     left = [x for x in arr if x < pivot]
6     middle = [x for x in arr if x == pivot]
7     right = [x for x in arr if x > pivot]
8     return quicksort(left) + middle + quicksort(right)
9  
10 print(quicksort([3,6,8,10,1,2,1]))

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 3/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

11 # Prints "[1, 1, 2, 3, 6, 8, 10]"


12  

Các phiên bản Python


Hiện nay, có 2 phiên bản python khác nhau đó là python 2 và python 3.
Hai phiên bản này có một chút khác nhau về cú pháp. Bạn không thể
dùng python 2 để chạy code của phiên bản python 3 và ngược lại. Một
lưu ý nữa là hiện nay python 2 đã bị khai tử nên chúng tôi khuyến khích
bạn sử dụng python 3. Để thuận lợi cho việc học khóa học nhanh python
này, chúng tôi đề nghị bạn sử dụng python phiên bản 3.5 trở lên.

Bạn có thể kiểm tra phiên bản python hiện tại của bạn bằng cách chạy
lệnh python -V hoặc python –version trên cửa sổ command line.

Các kiểu dữ liệu cơ bản trong Python


Cũng giống như hầu hết các ngôn ngữ lập trình khác, python cũng có các
kiểu dữ liệu cơ bản bao gồm: integers, floats, booleans, và strings.
Nhưng những kiểu dữ liệu này có cách sử dụng đơn giản và giảm bớt các
ràng buộc so với các ngôn ngữ khác.

Kiểu dữ liệu số: Kiểu dữ liệu số nguyên và số thực trong python đơn
giản hơn so với các ngôn ngữ khác. Một biến có kiểu là int hay float sẽ tự
được xác định thông qua giá trị mà bạn gán cho biến.

0  
1 x = 3
2 print(type(x)) # In ra "<class 'int'>"
3 print(x)       # In ra "3"
4 print(x + 1)   # Phép cộng; in ra "4"
5 print(x - 1)   # Phép trừ; in ra "2"
6 print(x * 2)   # Phép nhân; in ra "6"
7 print(x ** 2)  # Phép lũy thừa; in ra "9"
8 x += 1
9 print(x)  # In ra "4"
10 x *= 2
11 print(x)  # In ra "8"
12 y = 2.5
13 print(type(y))
5 # In ra "<class 'float'>"
14 print(y, y + 1, y * 2, y ** 2) # In ra "2.5 3.5 5.0 6.25"
15  

Chú ý rằng python không có toán tử tăng 1 đơn vị( x++ ) hay giảm đi 1
đơn vị( x-- ) giống như hầu hết các ngôn ngữ khác.

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 4/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Python cũng có sẵn kiểu dữ liệu cho số phức, bạn có thể xem mọi thông
tin chi tiết về nó trong trong tài liệu này.

Booleans: Python cũng hỗ trợ tất cả các toán tử logic như các ngôn ngữ
khác. Nhưng sẽ dùng chữ cái tiếng anh thay vì sử dụng các ký tự( &&,
||, ... )

0  
1 t = True
2 f = False
3 print(type(t)) # In ra"<class 'bool'>"
4 print(t and f) # Phép toán logic AND; in ra "False"
5 print(t or f)  # Phép toán logic OR; in ra "True"
6 print(not t)   # Phép toán logic NOT; in ra "False"
7 print(t != f)  # Phép toán logic XOR; in ra "True"
8  

Strings: Python hỗ trợ rất mạnh cho kiểu dữ liệu string:

0  
1 hello = 'hello'    # Khai báo chuỗi string có thể sử dụng dấu nháy đơ
2 world = "world"    # hoặc dấu nháy kép; Nó không ảnh hưởng gì cả.
3 5
print(hello)       # In ra "hello"
4 print(len(hello))  # Lấy chiều dài của string; in ra "5"
5 hw = hello + ' ' + world  # Nối chuỗi
6 print(hw)  # in ra "hello world"
7 hw12 = '%s %s %d' % (hello, world, 12)  # Sử dụng format style của st
8 print(hw12)  # in ra "hello world 12"
9  

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 5/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Đối tượng kiểu string cũng có rất nhiều hàm hữu ích, ví dụ như:

0  
1 s = "hello"
2 print(s.capitalize())  # Chuyển thành chuỗi viết hoa chữ cái đầu; in
3 print(s.upper())       # Chuyển toàn bộ chuỗi thành viết hoa; in ra "
4 print(s.rjust(7))      # Căn phải một chuỗi string, bổ sung bằng khoả
5 print(s.center(7))     # Căn giữa một chuỗi string, bổ sung bằng khoả
6 print(s.replace('l', '(ell)'))  # Thay thế mọi chuỗi con xuất hiện tr
7                                 # in ra "he(ell)(ell)o"
8 print('  world '.strip())  # Loại bỏ dấu cách thừa ở đầu/ cuối string
9  

Bạn có thể tìm danh sách tất cả các hàm của string tại tài liệu này.

Containers
Python đã được xây dựng sẵn một số loại containers: lists, dictionaries,
sets, và tuples.

Lists

Lists trong python đóng vai trò tương tự như mảng(arrays). Nhưng lists
có khả năng tự động thay đổi kích thước và các phần tử trong 1 list có
thể có kiểu dữ liệu khác nhau.

0  
1 xs = [3, 1, 2]    # Khởi tạo 1 list
2 print(xs, xs[2])  # In ra "[3, 1, 2] 2"
3 print(xs[-1])     # Chỉ số âm có thể được dùng là bắt đầu từ cuối li
4 xs[2] = 'foo'     # Lists có thể chứa các phần tử có kiểu dữ liệu kh
5 print(xs)         # In ra "[3, 1, 'foo']"
6 xs.append('bar')  # Thêm một phần tử vào cuối list
7 print(xs)         # In ra "[3, 1, 'foo', 'bar']"
8 x = xs.pop()      # Xóa và trả về phần tử ở cuối list
9 print(x, xs)      # In ra "bar [3, 1, 'foo']"
10  

Trượt trên list: Để có thể truy cập tới nhiều phần tử liên tiếp trên list.
Python cung cấp cơ chế trượt(slice) cho phép truy cập vào sublist của
một list dễ dàng và nó được gọi là slicing :

5
0  
1 nums = list(range(5))     # range là một built-in function giúp bạn
2 print(nums)               # In ra "[0, 1, 2, 3, 4]"
3 print(nums[2:4])          # Trượt từ chỉ số 2 đến 4(không bao gồm 4)
4 print(nums[2:])           # Trượt từ chỉ số 2 tới cuối cùng; in ra "
5 print(nums[:2])           # Trượt từ đầu tới chỉ số 2 (không bao gồm
6 print(nums[:])            # Trượt qua toàn bộ list ; in ra "[0, 1, 2

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 6/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

7 print(nums[:-1])          # Chỉ số của slice(trượt) cũng có thể là s


8 nums[2:4] = [8, 9]        # Gán các giá trị của sublist sử dụng slic
9 print(nums)               # In ra "[0, 1, 8, 9, 4]"
10  

Lưu ý thêm: Chỉ số âm giống như chỉ số dương nhưng là từ cuối list. Giả
sử list a có n phần tử. Thì a[-1] = a[n-1] , a[-2] = a[n-2] , a[:n-1]
= a[:-1] .

Chúng ta sẽ tiếp tục nhắc tới slice trong phần học về numpy.

Lặp: Bạn có thể lặp qua tất cả các phần tử của 1 list như sau:

0  
1 animals = ['cat', 'dog', 'monkey']
2 for animal in animals:
3     print(animal)
4 # Output:
5 # Chương trình sẽ in ra: "cat", "dog", "monkey". Mỗi phần tử trên 1 d
6  

Nếu bạn muốn lấy cả chỉ số để dùng ở bên trong vòng lặp, hãy sử dụng
build-in function enumerate  và làm như sau:

0  
1 animals = ['cat', 'dog', 'monkey']
2 for idx, animal in enumerate(animals):
3     print('#%d: %s' % (idx + 1, animal))
4 # Chương trình sẽ in ra "#1: cat", "#2: dog", "#3: monkey", mỗi phần
5  

List comprehensions: Trong nhiều tình huống, bạn có thể sẽ cần sử


dụng một list để chuyển đổi sang một list tương đương sử dụng một công
thức nào đó. Để dễ hiểu hơn, chúng ta hãy xem xét ví dụ tính toán bình
phương của từng phần tử trong list các số nguyên sau:

0  
1 nums = [0, 1, 2, 3, 4]
2 squares = []
3 for x in nums:
4     squares.append(x ** 2)
5 5
print(squares)   # In ra [0, 1, 4, 9, 16]
6  

Bạn có thể làm công việc trên đơn giản hơn rất nhiều với list
comprehensions:

0  

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 7/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

1 nums = [0, 1, 2, 3, 4]
2 squares = [x ** 2 for x in nums]
3 print(squares)   # In ra [0, 1, 4, 9, 16]
4  

List comprehensions cũng có thể kết hợp thêm với điều kiện:

0  
1 nums = [0, 1, 2, 3, 4]
2 even_squares = [x ** 2 for x in nums if x % 2 == 0]
3 print(even_squares)  # In ra "[0, 4, 16]"
4  

Dictionaries

Một dictionaries chứa các cặp (key,value), nó tương tự với map trong
Java và C++. Bạn có thể sử dụng như sau:

0  
1 d = {'cat': 'cute', 'dog': 'furry'}  # Khởi tạo 1 dict
2 print(d['cat'])       # Lấy giá trị của dict có key là 'cat'; In ra
3 print('cat' in d)     # Kiểm tra key có trong dict hay không; In ra
4 d['fish'] = 'wet'     # Set giá trị cho 1 key. Nếu key chưa có thì t
5                       # nếu có rồi thì ghi đè giá trị
6 print(d['fish'])      # In ra "wet"
7 # print(d['monkey'])  # KeyError: 'monkey' not a key of d
8 print(d.get('monkey', 'N/A'))  # Lấy giá trị theo key kèm theo defau
9 print(d.get('fish', 'N/A'))    # Lấy giá trị theo key kèm theo defau
10 del d['fish']         # Xóa 1 phần tử khỏi dict
11 print(d.get('fish', 'N/A')) # "fish" không còn ở trong dict; In ra "
12  

Bạn có thể tìm tất cả những gì bạn cần biết về dictionaries tại tài liệu
này.

Lặp: Bạn có thể lặp qua từng key của dictionary như sau:

0  
1 d = {'person': 2, 'cat': 4, 'spider': 8}
2 for animal in d:
3     legs = d[animal]
4     print('A %s has %d legs' % (animal, legs))
5 # Prints "A person has 2 legs", "A cat has 4 legs", "A spider has 8 l
6  5

Nếu bạn muốn cả key và value trong khi lặp, sử dụng hàm items :

0  
1 d = {'person': 2, 'cat': 4, 'spider': 8}
2 for animal, legs in d.items():

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 8/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

3     print('A %s has %d legs' % (animal, legs))


4 # Prints "A person has 2 legs", "A cat has 4 legs", "A spider has 8 l
5  

Dictionary comprehensions: Cái này tương tự như


list comprehensions, nhưng thêm nữa là bạn có thể dễ dàng xây dựng từ
điển mới. Ví dụ:

0  
1 nums = [0, 1, 2, 3, 4]
2 even_num_to_square = {x: x ** 2 for x in nums if x % 2 == 0}
3 print(even_num_to_square)  # Prints "{0: 0, 2: 4, 4: 16}"
4  

Sets

Set là một tập hợp các phần tử không có thứ tự và các phần tử không
trùng lặp(distinct). Hãy xem một ví dụ đơn giản sau đây:

0  
1 animals = {'cat', 'dog'}
2 print('cat' in animals)   # Kiểm tra 1 phần tử có trong set hay khôn
3 print('fish' in animals)  # prints "False"
4 animals.add('fish')       # Thêm phần tử vào set
5 print('fish' in animals)  # Prints "True"
6 print(len(animals))       # Số phần tử có trong set; prints "3"
7 animals.add('cat')        # Thêm phần tử đã có trong set => không là
8 print(len(animals))       # Prints "3"
9 animals.remove('cat')     # Xóa phần tử khỏi set
10 print(len(animals))       # Prints "2"
11  

Như thường lệ, mọi thứ bạn cần về set có thể xem tại đây.

5
Lặp: Việc lặp qua từng phần tử trong một set có cú pháp giống như với
list. Tuy nhiên, vì set chứa các phần tử không có thứ tự. Nên bạn không
thể biết trước thứ tự in ra của các phần tử:

0  
1 animals = {'cat', 'dog', 'fish'}

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 9/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

2 for idx, animal in enumerate(animals):


3     print('#%d: %s' % (idx + 1, animal))
4 # Prints "#1: fish", "#2: dog", "#3: cat"
5  

Set comprehensions: Giống như list và dictionaries, chúng ta có thể dễ


dàng xây dựng sets sử dụng set comprehensions:

0  
1 from math import sqrt
2 nums = {int(sqrt(x)) for x in range(30)}
3 print(nums)  # Prints "{0, 1, 2, 3, 4, 5}"
4  

Tuples

Tuple là một kiểu dữ liệu bất biến chứa một danh sách các phần tử có thứ
tự. Một tuple trong nhiều trường hợp sẽ tương tự với 1 list. Có một sự
khác biệt quan trọng nhất đó là tuple có thể sử dụng giống như key trong
dictionaries và có thể như các phần tử trong sets, còn list thì không thể.
Đây là ví dụ:

0  
1 d = {(x, x + 1): x for x in range(10)}  # Tạo một dict với keys là tu
2 t = (5, 6)        # Tạo 1 tuple
3 print(type(t))    # Prints "<class 'tuple'>"
4 print(d[t])       # Prints "5"
5 print(d[(1, 2)])  # Prints "1"
6  

Tài liệu này sẽ cho bạn thêm thông tin về tuples.

Functions
Hàm trong python được định nghĩa sử dụng keyword def . Ví dụ:

0  
1 def sign(x):
2     if x > 0:
3         return 'positive'
4     elif x < 0:
5         return 'negative'
6 5
    else:
7         return 'zero'
8  
9 for x in [-1, 0, 1]:
10     print(sign(x))
11 # Prints "negative", "zero", "positive"
12  

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 10/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Chúng ta cũng thường định nghĩa một hàm có các optional tham số(có
thể truyền giá trị cho tham số đó hoặc không truyền). Nếu không truyền
thì hàm dùng giá trị mặc định. Ví dụ:

0  
1 def hello(name, loud=False):
2     if loud:
3         print('HELLO, %s!' % name.upper())
4     else:
5         print('Hello, %s' % name)
6  
7 hello('Bob') # Prints "Hello, Bob"
8 hello('Fred', loud=True)  # Prints "HELLO, FRED!"
9  

Có rất nhiều thông tin hữu ích về hàm trong python ở đây

Classes
Cú pháp để định nghĩa một class trong python vô cùng đơn giản:

0  
1 class Greeter(object):
2  
3     # Constructor
4     def __init__(self, name):
5         self.name = name  # Create an instance variable
6  
7     # Instance method
8     def greet(self, loud=False):
9         if loud:
10             print('HELLO, %s!' % self.name.upper())
11         else:
12             print('Hello, %s' % self.name)
13  
14 g = Greeter('Fred')  # Construct an instance of the Greeter class
15 g.greet()            # Call an instance method; prints "Hello, Fred"
16 g.greet(loud=True)   # Call an instance method; prints "HELLO, FRED!
17  

Có rất nhiều điều thú vị về class trong python ở đây nè.

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 11/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Nếu bạn chỉ muốn học python cơ bản, nội dung về python trong khóa học
nhanh python này sẽ tạm dừng ở đây. Tại phần tiếp theo, Nguyễn Văn
Hiếu Blog sẽ tiếp tục trình bày về các thư viện phổ biến hay được sử
dụng trong lập trình python. Nếu bạn có hứng thú, hãy tiếp tục theo dõi
khóa học nhanh lập trình python này.

Numpy
Phần tiếp theo trong khóa học nhanh python này sẽ trình bày về thư viện
toán học numpy. Đây là một thư viện hỗ trợ đắc lực cho tính toán ma
trận. Để biết cụ thể numpy là cái gì chúng ta hãy cũng nhau tìm hiểu
nhé.

Numpy là một thư viện lõi phục vụ cho khoa học máy tính của Python.
Nó hỗ trợ mạnh mẽ cho các array nhiều chiều, và các phương thức để
làm việc với các mảng nhiều chiều này. Nếu bạn đã có kinh nghiệm sử
dụng MATLAB, có thể tutorial này sẽ hữu ích để bạn bắt đầu với Numpy.

Arrays
Một numpy array là một mạng lưới các giá trị, và tất cả các giá trị phải có
cùng kiểu dữ liệu. Chỉ số của numpy array được biểu diễn bằng các số
nguyên không âm. Số chiều thì(1-D array -> vector, 2-D array – ma
trận, …) được gọi là rank của numpy array. Và shape  của array là một
tuple các số nguyên thể hiện cho kích thước của array theo mỗi chiều của
aray.

Chúng ta có thể khởi tạo numpy array từ một container list trong python.
Numpy array vẫn dùng cặp ngoặc vuông để truy cập tới từng phần tử.

0  
1 import numpy as np
2  
3 a = np.array([1, 2, 3])   # Tạo 1 numpy array rank = 1
4 print(type(a))            # Prints "<class 'numpy.ndarray'>"
5 print(a.shape)            # Prints "(3,)"
6 print(a[0], a[1], a[2])   # Prints "1 2 3"
7 5
a[0] = 5                  # Thay đổi giá trị của 1 phần tử
8 print(a)                  # Prints "[5, 2, 3]"
9  
10 b = np.array([[1,2,3],[4,5,6]])    # Tạo 1 numpy array rank = 2
11 print(b.shape)                     # Prints "(2, 3)"
12 print(b[0, 0], b[0, 1], b[1, 0])   # Prints "1 2 4"
13  

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 12/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Numpy cũng có sẵn rất nhiều hàm hỗ trợ tạo numpy array:

0  
1 import numpy as np
2  
3 a = np.zeros((2,2))   # Tạo numpy array mà tất cả phần tử là 0
4 print(a)              # Prints "[[ 0.  0.]
5                       #          [ 0.  0.]]"
6  
7 b = np.ones((1,2))    # Tạo numpy array mà tất cả phần tử là 1
8 print(b)              # Prints "[[ 1.  1.]]"
9  
10 c = np.full((2,2), 7)  # Tạo một mảng hằng
11 print(c)               # Prints "[[ 7.  7.]
12                        #          [ 7.  7.]]"
13  
14 d = np.eye(2)         # Tạo ma trận đơn vị 2 x 2
15 print(d)              # Prints "[[ 1.  0.]
16                       #          [ 0.  1.]]"
17  
18 e = np.random.random((2,2))  # Tạo array với các giá trị ngẫu nhiên
19 print(e)                     # Might print "[[ 0.91940167  0.0814394
20                              #               [ 0.68744134  0.8723668
21  

Bạn có thể xem các phương pháp khởi tạo numpy array tại đây.

Truy xuất mảng(Array indexing)


Numpy cung cấp một số cách khác nhau để truy xuất vào các phần tử
trong mảng(numpy array).

Trượt(Slicing): Tương tự như list trong Python, numpy array cũng có


thể trượt trên mảng. Trong trường hợp mảng nhiều chiều, bạn phải chỉ
định việc trượt trên tất cả các chiều của mảng:

0  
1 import numpy as np
2  
3 # Khởi tạo numpy array có shape = (3, 4) có giá trị như sau:
4 # [[ 1  2  3  4]
5 #  [ 5  6  7  8]
6 #  [ 9 10 11 12]]
5
7 a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
8  
9 # Sử dụng slicing để tạo numpy array b bằng cách lấy 2 hàng đầu tiên
10 # và cột 1, 2. Như vậy b sẽ có shape = (2, 2):
11 # [[2 3]
12 #  [6 7]]
13 b = a[:2, 1:3]

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 13/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

14  
15 # Một array tạo ra từ slicing sẽ có cùng địa chỉ với array gốc.
16 # Nếu thay đổi 1 trong 2 thì array còn lại cũng thay đổi.
17 print(a[0, 1])   # Prints "2"
18 b[0, 0] = 77     # b[0, 0] ở đây tương đương với a[0, 1]
19 print(a[0, 1])   # Prints "77"
20  

Bạn cũng có thể kết hợp việc dùng slicing và dùng chỉ số. Tuy nhiên, cách
làm đó sẽ cho ra một mảng mới có rank thấp hơn mảng gốc. Chú ý rằng
nó sẽ khác việc slicing trong matlab:

0  
1 import numpy as np
2  
3 # Tạo một numpy array có shape (3, 4) với giá trị như sau:
4 # [[ 1  2  3  4]
5 #  [ 5  6  7  8]
6 #  [ 9 10 11 12]]
7 a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
8  
9 # Dùng 2 cách khác nhau để tạo array mới từ array gốc
10 # Dùng kết hợp chỉ số và slice -> được array mới có rank thấp hơn,
11 # Nếu chỉ dùng slice ta sẽ có 1 array mới có cùng rank
12 # với array gốc
13 row_r1 = a[1, :]    # Rank 1, hàng thứ 2 của a
14 row_r2 = a[1:2, :]  # Rank 2, vẫn là hàng thứ 2 của a
15 print(row_r1, row_r1.shape)  # Prints "[5 6 7 8] (4,)"
16 print(row_r2, row_r2.shape)  # Prints "[[5 6 7 8]] (1, 4)"
17  
18 # Chúng ta có thể làm tương tự với cột của numpy array:
19 col_r1 = a[:, 1]
20 col_r2 = a[:, 1:2]
21 print(col_r1, col_r1.shape)  # Prints "[ 2  6 10] (3,)"
22 print(col_r2, col_r2.shape)  # Prints "[[ 2]
23                              #          [ 6]
24 5
                             #          [10]] (3, 1)"
25  

Integer array indexing: Khi bạn truy xuất mảng sử dụng trượt, kết quả
bạn thu được sẽ luôn là một mảng con của mảng ban đầu. Tuy nhiên, sử
dụng chỉ số mảng cho phép bạn xây dựng các mảng tùy ý từ một mảng
khác. Đây là một ví dụ:
https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 14/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

0  
1 import numpy as np
2  
3 a = np.array([[1,2], [3, 4], [5, 6]])
4  
5 # Truy xuất mảng dùng chỉ số.
6 # Kết quả thu được là 1 mảng có shape (3,)
7 print(a[[0, 1, 2], [0, 1, 0]])  # Prints "[1 4 5]"
8  
9 # Sẽ thu được kết quả tương đương như trên với cách này:
10 print(np.array([a[0, 0], a[1, 1], a[2, 0]]))  # Prints "[1 4 5]"
11  
12 # Bạn được phép sử dụng chỉ số mảng để
13 # truy xuất tới 1 phần tử
14 # của mảng gốc nhiều hơn 1 lần
15 print(a[[0, 0], [1, 1]])  # Prints "[2 2]"
16  
17 # Một cách làm khác tương đương:
18 print(np.array([a[0, 1], a[0, 1]]))  # Prints "[2 2]"
19  

Có một mẹo khá là hay bạn có thể dùng chỉ số mảng để chọn hoặc thay
đổi giá trị từng phần tử trong từng hàng của mảng:

0  
1 import numpy as np
2  
3 # Tạo 1 mảng numpy array
4 a = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
5  
6 print(a)  # prints "array([[ 1,  2,  3],
7           #                [ 4,  5,  6],
8           #                [ 7,  8,  9],
9           #                [10, 11, 12]])"
10  
11 # Tạo một mảng lưu giữ chỉ số
12 b = np.array([0, 2, 0, 1])
13  
14 # Lấy một phần tử từ mỗi hàng của a sử dụng các chỉ số đã lưu ở b
15 print(a[np.arange(4), b])  # Prints "[ 1  6  7 11]"
16  
17 # Thay đổi một phần tử từ mỗi hàng của a sử dụng các chỉ số đã lưu ở
18 a[np.arange(4), b] += 10
19  
20 print(a)  # prints "array([[11,  2,  3],
21 5
          #                [ 4,  5, 16],
22           #                [17,  8,  9],
23           #                [10, 21, 12]])
24  

Boolean array indexing: Boolean array indexing cho phép bạn chọn ra

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 15/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

các phần tử mà bạn mong muốn. Cách này thường sử dụng để chọn các
phần tử thỏa mãn một điều kiện nào đó. Đây là một ví dụ:

0  
1 import numpy as np
2  
3 a = np.array([[1,2], [3, 4], [5, 6]])
4  
5 bool_idx = (a > 2)   # Tìm tất cả các phần tử có giá trị > 2;
6                      # Trả về một boolean numpy array có cùng kích t
7                      # mà giá trị tại mỗi phần tử là True nếu phần t
8                      # của a tại đó > 2, và False cho TH ngược lại
9  
10 print(bool_idx)      # Prints "[[False False]
11                      #          [ True  True]
12                      #          [ True  True]]"
13  
14 # Sử dụng một boolean array indexing để lấy
15 # các phần tử thỏa mãn điều kiện nhất định trong a
16 # Ví dụ ở đây in ra các giá trị của a > 2
17 # sử dụng array bool_idx đã tạo
18 print(a[bool_idx])  # Prints "[3 4 5 6]"
19  
20 # Một cách viết ngắn gọn hơn cho cùng kết quả:
21 print(a[a > 2])     # Prints "[3 4 5 6]"
22  

Nếu bạn muốn tìm kiếm thêm thông tin về numpy array indexing thì hãy
tham khảo bài viết này.

Kiểu dữ liệu
Tất cả các phần tử trong một numpy array phải có cùng kiểu dữ
liệu. Numpy cung cấp một số lượng lớn các kiểu dữ liệu số mà bạn có thể
sử dụng để xây dựng các mảng. Numpy sẽ cố gắng đoán kiểu dữ liệu khi
bạn khởi tạo, nhưng các hàm khởi tạo numpy array cũng có một tham số
tùy chọn để bạn chỉ định kiểu dữ liệu cụ thể mà bạn muốn. Ví dụ:

0  
1 import numpy as np
2  
3 x = np.array([1, 2])   # numpy tự xác định kiểu dữ liệu
5
4 print(x.dtype)         # Prints "int64"
5  
6 x = np.array([1.0, 2.0])   # numpy tự xác định kiểu dữ liệu
7 print(x.dtype)             # Prints "float64"
8  
9 x = np.array([1, 2], dtype=np.int64)   # Chỉ định kiểu dữ liệu bởi n
10 print(x.dtype)                         # Prints "int64"

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 16/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

11  

Bạn có thể xem thêm chi tiết về các kiểu dữ liệu của numpy tại tài liệu
này.

Phép toán trên numpy array


Các phép toán cơ bản trên numpy array được thực thi theo kiểu “từng
phần tử của mảng này kết hợp với phần tử ở vị trí tương ứng của mảng
kia” với các phép +, -, *, /. Xem ví dụ sau:

0  
1 import numpy as np
2  
3 x = np.array([[1,2],[3,4]], dtype=np.float64)
4 y = np.array([[5,6],[7,8]], dtype=np.float64)
5  
6 # Cộng từng phần tử của x với từng phần tử của y với nhau. Cả 2 cách
7 # x[0][0] + y[0][0], x[0][1] + y[0][1], ...
8 # [[ 6.0  8.0]
9 #  [10.0 12.0]]
10 print(x + y)
11 print(np.add(x, y))
12  
13 # Tính hiệu từng phần tử của x với trừ cho từng phần tử của y. Cả 2
14 # [[-4.0 -4.0]
15 #  [-4.0 -4.0]]
16 print(x - y)
17 print(np.subtract(x, y))
18  
19 # Tính tích từng phần tử của a nhân với từng phần tử của b.
20 # Cả 2 cách cho cùng 1 kết quả
21 # Lưu ý: Đây không phải là phép nhân hai ma trận trong toán học
22 # [[ 5.0 12.0]
23 #  [21.0 32.0]]
24 print(x * y)
25 print(np.multiply(x, y))
26  
27 # Thực hiện tính thương của từng phần tử trong x chia cho phần tử tư
28 # Cả 2 cách cho cùng 1 kết quả
29 # [[ 0.2         0.33333333]
30 #  [ 0.42857143  0.5       ]]
31 print(x / y)
32 print(np.divide(x, y))
33 5
 
34 # Bình phương từng phần tử trong x
35 # [[ 1.          1.41421356]
36 #  [ 1.73205081  2.        ]]
37 print(np.sqrt(x))
38  

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 17/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Chú ý: Không giống như matlab, toán tử *  của numpy là phép nhân tích
chập(từng phần tử nhân với nhau cho ra kết quả). Còn toán tử  *   trong
matlab là phép nhân 2 ma trận. Để nhân 2 ma trận hoặc nhân vector với
ma trận trong numpy, chúng ta sử dụng hàm dot :

0  
1 # Ví dụ về dot function
2 import numpy as np
3  
4 x = np.array([[1,2],[3,4]])
5 y = np.array([[5,6],[7,8]])
6  
7 v = np.array([9,10])
8 w = np.array([11, 12])
9  
10 # Tính tích trong của(inner product) 2 vector.
11 # Cả 2 đều in ra 219
12 print(v.dot(w))
13 print(np.dot(v, w))
14  
15 # Nhân ma trận với vector. Cả 2 in ra array rank = 1: [29 67]
16 print(x.dot(v))
17 print(np.dot(x, v))
18  
19 # Phép nhân trên 2 ma trận; Kết quả là một ma trận có rank = 2
20 # [[19 22]
21 #  [43 50]]
22 print(x.dot(y))
23 print(np.dot(x, y))
24  

Numpy cung cấp rất nhiều hàm hỗ trợ tính toán trên mảng. Một hàm ví
dụ mà ta hay sử dụng là sum :

0  
1 # sum function
2 import numpy as np
3  
4 x = np.array([[1,2],[3,4]])
5  
6 print(np.sum(x))  # Tính tổng tất cả các phần tử; prints "10"
7 print(np.sum(x, axis=0))  # Tính tổng theo từng cột; prints "[4 6]"
8 print(np.sum(x, axis=1))  # Tính tổng theo từng hàng; prints "[3 7]"
9  
5
Bạn có thể xem đầy đủ các hàm tính toán toán học của numpy tại đây.

Trong quá trình làm việc với mảng, chúng ta thường xuyên phải thay đổi
kích thước của mảng. Ví dụ đơn giản nhất của trường hợp này là phép

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 18/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

chuyển vị ma trận. Để lấy chuyển vị của một ma trận, chúng ta sử dụng


thuộc tính T  của đối tượng mảng:

0  
1 # Chuyển vị ma trận
2 import numpy as np
3  
4 x = np.array([[1,2], [3,4]])
5 print(x)    # Prints "[[1 2]
6             #          [3 4]]"
7 print(x.T)  # Prints "[[1 3]
8             #          [2 4]]"
9  
10 # Chuyển vị của vector là một vector không đổi:
11 v = np.array([1,2,3])
12 print(v)    # Prints "[1 2 3]"
13 print(v.T)  # Prints "[1 2 3]"
14  

Numpy cung cấp rất nhiều hàm cho phép thao tác với mảng, bạn có thể
xem danh sách đầy đủ tại đây.

Broadcasting
Broadcasting là một cơ chế mạnh mẽ cho phép bạn thực thi nhanh chóng
với các phép toán số học trên các numpy array có kích thước khác nhau.
Giả sử bạn có một mảng có kích thước nhỏ và mảng kia có kích thước
lớn. Bạn muốn dùng mảng nhỏ kia nhiều lần để thay đổi giá trị của mảng
lớn.

Ví dụ, chúng ta muốn cộng thêm một vector hằng vào từng hàng của
một ma trận. Bạn có thể làm như sau:

0  
1 import numpy as np
2  
3 # Cộng thêm giá trị vector v vào từng hàng của x,
4 # chứa kết quả vào ma trận y
5 x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
6 v = np.array([1, 0, 1])
7 y = np.empty_like(x)   # Tạo một ma trận rỗng có kích thước như x
8  
5
9 # Thêm vector v vào từng hàng của ma trận x sử dụng vòng lặp
10 for i in range(4):
11     y[i, :] = x[i, :] + v
12  
13 # Và đây là y nhận được
14 # [[ 2  2  4]
15 #  [ 5  5  7]

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 19/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

16 #  [ 8  8 10]


17 #  [11 11 13]]
18 print(y)
19  

Cách này hoạt động khá tốt, nhưng khi ma trận x là rất lớn thì việc lặp
này sẽ rất chậm. Nếu bạn để ý thì công việc này tương tự việc thực hiện
cộng từng phần tử của x với một ma trận vv có kích thước như y và
mỗi hàng là một vector v . Bạn có thể xem code để hiểu rõ hơn:

0  
1 import numpy as np
2  
3 # Cộng thêm giá trị vector v vào từng hàng của x,
4 # chứa kết quả vào ma trận y
5 x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
6 v = np.array([1, 0, 1])
7 vv = np.tile(v, (4, 1))   # Copy thành xếp chồng chứa 4 vector v
8 print(vv)                 # Prints "[[1 0 1]
9                           #          [1 0 1]
10                           #          [1 0 1]
11                           #          [1 0 1]]"
12 y = x + vv  # Thực hiện phép cộng
13 print(y)  # Prints "[[ 2  2  4
14           #          [ 5  5  7]
15           #          [ 8  8 10]
16           #          [11 11 13]]"
17  

Numpy broadcasting cho phép chúng ta thực thi tính toán này mà không
cần phải tạo ra nhiều bản sao của v . Và đây là code khi sử
dụng broadcasting:

0  
1 # Broadcasting
2 import numpy as np
3  
4 # Cộng thêm giá trị vector v vào từng hàng của x,
5 # chứa kết quả vào ma trận y
6 x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
7 v = np.array([1, 0, 1])
8 y = x + v  # Thêm v vào từng hàng của x sử dụng broadcasting
9 print(y)  # Prints "[[ 2  2  4]
10           #          [ 5  5  7]
11           #          [
5 8  8 10]
12           #          [11 11 13]]"
13  

Bằng cách dùng Broadcasting, dòng code  y = x + v  vẫn làm việc thậm
chí  x  có kích thước  (4, 3)  và  v  có kích thước  (3,) .

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 20/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Nguyên tắc

Broadcast thực thi trên 2 mảng theo quy tắc sau:

1. Nếu các mảng không có cùng rank, tăng kích thước của mảng có rank
thấp hơn cho tới khi cả 2 có cùng kích thước.

2. Hai mảng được cho là tương thích trong một chiều nếu chúng có cùng
kích thước trong chiều đó hoặc nếu một trong 2 mảng có kích là 1
trong chiều đó.

3. Các mảng có thể thực hiện broadcast nếu chúng tương thích trên tất
cả các chiều.

4. Kết quả sau khi thực thi broadcast sẽ là một ma trận có kích thước
bằng với kích thước của ma trận lớn hơn.

5. Trong bất kỳ chiều nào mà mảng đầu có kích thước là 1 và mảng còn
lại có kích thước lớn hơn 1, mảng đầu đó sẽ coi như là copy các giá trị
của nó(ở chiều đó) theo chiều đó.

Nếu đoạn giải thích này chưa khiến bạn hiểu rõ ràng, hãy đọc giải thích ở
tài liệu này hoặc bài giải thích này.

Các hàm thực thi broadcasting được gọi là universal functions. Bạn có thể
tìm danh sách các hàm đó trong tài liệu này.

Một vài trường hợp sử dụng broadcasting khác:

0  
1 import numpy as np
2  
3 # Tính tích ngoài(outer product) của 2 vector
4 v = np.array([1,2,3])  # v has shape (3,)
5 w = np.array([4,5])    # w has shape (2,)
6 # Để tính tích ngoài(outer product), đầu tiên cần reshape v về shape
7 # Sau đó broadcast nó với w được 1 output có shape (3, 2),
8 # Đây là kết quả:
9 # [[ 4  5]
10 #  [ 8 10]
11 #  [12 15]]
12 print(np.reshape(v,
5 (3, 1)) * w)
13  
14 # Thêm một vector vào từng hàng của ma trận
15 x = np.array([[1,2,3], [4,5,6]])
16 # x có shape (2, 3) và v có shape (3,) vì vậy kết quả có shape (2, 3
17 # có giá trị như sau:
18 # [[2 4 6]
19 #  [5 7 9]]
https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 21/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

20 print(x + v)
21  
22 # Thêm một vector vào từng cột của ma trận
23 # x có shape (2, 3) và w có shape (2,).
24 # Nếu ta chuyển vị x thì shape x là (3, 2) và có thể broadcast
25 # với w cho ra kết quả có shape (3, 2); thực hiện chuyển vị kết quả
26 # ma trận shape (2, 3) là kết quả của x thêm v ở mỗi cột.
27 # Cho ta kết quả như sau:
28 # [[ 5  6  7]
29 #  [ 9 10 11]]
30 print((x.T + w).T)
31  
32 # Một cách khác là reshape w thành vector cột (2, 1);
33 # Sau đó ta có thể broadcast nó trực tiếp với x
34 # để cho ra cùng kết quả
35 print(x + np.reshape(w, (2, 1)))
36  
37 # Nhân ma trận với hằng số:
38 # x có shape (2, 3). Numpy chỉ định hằng số có shape là ();
39 # Nó có thể broadcast với x có shape (2, 3), cho ra kết quả như sau:
40 # [[ 2  4  6]
41 #  [ 8 10 12]]
42 print(x * 2)
43  

Broadcasting giúp cho code của bạn trở nên ngắn gọn hơn và thực thi
nhanh hơn. Vì vậy, bạn hãy cố gắng sử dụng nó khi có thể.

Tài liệu về Numpy


Những kiến thức trên đây của khóa học lập trình python đã cung cấp cho
bạn rất nhiều hiểu biết cần thiết về numpy. Nhưng đó chưa phải tất cả,
hãy đọc tài liệu này để có nhiều hơn kiến thức về numpy.

Phần tiếp theo trong khóa học lập trình python sẽ là bài hướng dẫn về
thư viện Scipy. Hãy cùng Nguyễn Văn Hiếu tiếp tục tìm hiểu nhé.

SciPy
Numpy hỗ trợ rất mạnh mẽ cho mảng nhiều chiều và cung cấp các chức
năng cơ bản cho việc tính toán vào các mảng nhiều chiều này. Scipy
được5xây dựng trên nền tảng của Numpy, cung cấp rất nhiều các hàm để
hỗ trợ tính toán trên các numpy arrays. Scipy được sử dụng trong nhiều
bài toán và lĩnh vực khác nhau.

Scipy trong xử lý ảnh (Image operations)

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 22/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Scipy cung cấp một số hàm cơ bản để làm việc với ảnh. Ví dụ, nó có các
hàm để đọc ảnh từ ổ cứng thành 1 numpy arrays, lưu numpy arrays
thành file ảnh trong ổ cứng, thay đổi kích thước của ảnh. Đây là một ví
dụ đơn giản chứng minh cho điều đó:

0  
1 from scipy.misc import imread, imsave, imresize
2  
3 # Đọc 1 ảnh JPEG vào 1 numpy arrays
4 img = imread('../assets/cat.jpg')
5 print(img.dtype, img.shape)  # Prints "uint8 (400, 248, 3)"
6  
7 # Chúng ta có thể thay đổi màu sắc của ảnh bằng cách
8 # thay đổi giá trị trên từng kênh màu(R,G, B)
9 # Ảnh có kích thước (400, 248, 3) - 3 là số kênh màu;
10 # Chúng ta nhân nó với array [1, 0.95, 0.9] có kích thước (3,);
11 # Điều này có nghĩa là giá trị kênh màu Red không đổi,
12 # nhân thêm ở kênh màu green và blue thêm 0.95 và 0.9
13 img_tinted = img * [1, 0.95, 0.9]
14  
15 # Thay đổi kích thước ảnh img_tinted về 300 by 300 pixels.
16 img_tinted = imresize(img_tinted, (300, 300))
17  
18 # Lưu ảnh img_tinted vào ổ cứng
19 imsave('../assets/cat_tinted.jpg', img_tinted)
20  

Bạn có thể xem sử thay đổi vì ảnh đã lưu trong thư mục assets. Bên trái
là ảnh gốc và bên phải là ảnh đã thay đổi màu + thay đổi kích thước.

Sử dụng scipy để đọc, thay đổi kích thước và lưu ảnh

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 23/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

MATLAB files
Các hàm  scipy.io.loadmat  và scipy.io.savemat . Hai hàm này cho phép
bạn đọc và ghi matlab files. Bạn có thể đọc về nó tại tài liệu này.

Khoảng cách giữa các điểm


Scipy định nghĩa một số hàm hữu ích cho việc tính khoảng cách giữa các
điểm.

Hàm  scipy.spatial.distance.pdist : tính toán khoảng cách giữa 2 cặp


điểm bất kỳ trong một tập hợp các điểm được cho.

0  
1 import numpy as np
2 from scipy.spatial.distance import pdist, squareform
3  
4 # Tạo một numpy array mà mỗi hàng là một điểm trong không gian 2 chiề
5 # [[0 1]
6 #  [1 0]
7 #  [2 0]]
8 x = np.array([[0, 1], [1, 0], [2, 0]])
9 print(x)
10  
11 # tính khoảng cách Euclidean giữa tất cả các hàng trong x.
12 # d[i, j] là khoảng cách Euclidean giữa x[i, :] và x[j, :],
13 # Và d sẽ có giá trị như sau:
14 # [[ 0.          1.41421356  2.23606798]
15 #  [ 1.41421356  0.          1.        ]
16 #  [ 2.23606798  1.          0.        ]]
17 d = squareform(pdist(x, 'euclidean'))
18 print(d)
19  

Bạn có thể đọc đầy đủ thông tin chi tiết về hàm này trong tài liệu này.

 Một hàm tương tự ( scipy.spatial.distance.cdist ). Nó giúp tính toán


khoảng cách giữa các cặp điểm trong 1 tập hợp các điểm cho trước; bạn
có thể đọc thêm trong tài liệu này.
Thư viện Matplotlib sẽ là bài học cuối cùng trong khóa học nhanh python.
Đây là một thư viện hỗ trợ đắc lực trong việc biểu diễn dữ liệu. Matplot
5
lib sẽ giúp bạn biểu diễn dữ liệu lên đồ thì và cho cái nhìn trực quan
nhất.

Matplotlib

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 24/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Matplotlib là một thư viện vẽ đồ thị.Trong khóa học nhanh python này tôi
sẽ trình bày ngắn gọn về mô đun matplotlib.pyplot . Nó cung cấp chức
năng vẽ đồ thị tương tự như trong MATLAB.

Vẽ đồ thị
Một hàm quan trọng nhất trong matplotlib là  plot , nó cho phép bạn vẽ
các đồ thị với dữ liệu 2 chiều. Đây là một ví dụ:

0  
1 import numpy as np
2 import matplotlib.pyplot as plt
3  
4 # Tính toán x và y để lấy 1 số cặp điểm trên đồ thị hình sin
5 x = np.arange(0, 3 * np.pi, 0.1)
6 y = np.sin(x)
7  
8 # Vẽ đồ thị theo các điểm dữ liệu dùng matplotlib
9 plt.plot(x, y)
10 plt.show()  # Bạn phải gọi hàm plt.show() để đồ thị xuất hiện.
11  

Sau khi chạy bạn sẽ thu được kết quả như sau:

Sử dụng matplotlib để vẽ đồ thị 2D

Chúng ta có thể bổ sung thêm một số thông tin cho đồ thị như: vẽ nhiều
đồ thị trên một, thêm chú thích, nhãn của các trục đồ thị, tiêu đề. Việc
này có
5 thể làm rất là đơn giản như sau:

0  
1 import numpy as np
2 import matplotlib.pyplot as plt
3  
4 # Tính toán x và y để lấy 1 số cặp điểm trên đồ thị hình sin và cosi

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 25/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

5 x = np.arange(0, 3 * np.pi, 0.1)


6 y_sin = np.sin(x)
7 y_cos = np.cos(x)
8  
9 # Vẽ đồ thị theo các điểm dữ liệu dùng matplotlib
10  
11 plt.plot(x, y_sin)
12 plt.plot(x, y_cos)
13 plt.xlabel('x axis label') # nhãn trục x
14 plt.ylabel('y axis label') # nhãn trục y
15 plt.title('Sine and Cosine') # set tiêu đề
16 plt.legend(['Sine', 'Cosine']) # Hiển thị chú thích của đồ thị
17 plt.show()
18  

Kết quả sau khi chạy như sau:

Vẽ một đồ thị sử dụng matplotlib

Bạn có thể đọc thêm thông tin về hàm  plot  trong tài liệu này.

Đồ thị con (Subplots)


Bạn có thể vẽ các đồ thị khác nhau trên cùng một hình bằng cách sử
dụng hàm  subplot  . Đây là một ví dụ:

0  
1 import numpy as np
2 import matplotlib.pyplot as plt
3  
5
4 # Tính toán x và y để lấy 1 số cặp điểm trên đồ thị hình sin và cosi
5 x = np.arange(0, 3 * np.pi, 0.1)
6 y_sin = np.sin(x)
7 y_cos = np.cos(x)
8  
9 # Thiết lập lưới các đồ thị chia làm 2 đồ thị con theo chiều cao.
10 # và set đồ thị con đầu tiên active.

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 26/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

11 # active nghĩa là bảo code rằng tao đang làm việc với nó.
12 plt.subplot(2, 1, 1)
13  
14 # Vẽ đồ thị đầu tiên
15 plt.plot(x, y_sin)
16 plt.title('Sine')
17  
18 # Set đồ thị thứ 2 active, và vẽ.
19 plt.subplot(2, 1, 2)
20 plt.plot(x, y_cos)
21 plt.title('Cosine')
22  
23 # Hiển thị.
24 plt.show()
25  

Và bạn có thể thấy kết quả như hình sau:

Kết quả sử dụng subplot

Bạn có thể đọc nhiều hơn thông tin về hàm  subplot  trong tài liệu này.

Hình ảnh
Bạn có thể dùng hàm  imshow  của thư viện matplotlib để hiển thị hình
ảnh. Đây là một ví dụ:

0  
1 import numpy as np
2 from scipy.misc import imread, imresize
3 import
5 matplotlib.pyplot as plt
4  
5 img = imread('../assets/cat.jpg')
6 img_tinted = img * [1, 0.95, 0.9]
7  
8 # Hiển thị ảnh gốc
9 plt.subplot(1, 2, 1)
10 plt.imshow(img)
https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 27/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

11  
12 # Hiện thị ảnh sau khi thay đổi màu
13 plt.subplot(1, 2, 2)
14  
15 # Để tránh xảy ra lỗi trong trường hợp img_tinted không phải kiểu ui
16 # chúng ta cast - ép kiểu nó về uint8 trước khi hiển thị
17 plt.imshow(np.uint8(img_tinted))
18 plt.show()
19  

Tới đây là đã kết thúc bài hướng dẫn của khóa học lập trình python. Cũng
như cách sử dụng một số thư viện hỗ trợ cho khoa học dữ liệu. Cảm ơn
tất cả các bạn đã quan tâm tới bài viết.

Tổng kết khóa học lập trình python


Các bạn cũng có thể tham khảo thêm nhiều khóa học hay khác tại
website: https://nguyenvanhieu.vn/
Cùng với việc học khóa học lập trình python trên blog này, các bạn cũng
nên tham khảo thêm 1 số tài liệu bổ ích dưới đây nữa:

1. https://www.codecademy.com/learn/learn-python

2. https://www.learnpython.org/

3. Ebook learn python the hard way – Zed Shaw

4. http://cs231n.github.io/python-numpy-tutorial/

Nếu 5bạn có bất kỳ thắc mắc nào liên quan tới khóa học lập trình python.
Hãy để lại câu hỏi ở phần bình luận cuối bài nhé. Tôi sẽ cùng các bạn giải
quyết những thắc mắc đó.

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 28/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Nguyễn Văn Hiếu


Sáng lập cộng đồng Lập Trình Không Khó với mong muốn giúp đỡ các bạn trẻ trên
con đường trở thành những lập trình viên tương lai. Tất cả những gì tôi viết ra đây
chỉ đơn giản là sở thích ghi lại các kiến thức mà tôi tích lũy được.






Blog chia sẻ kiến thức lập trình của Hiếu, xây dựng cộng đồng những người học lập trình. Cho đi
kiến thức mình có là cách học tập hiệu quả nhất

 Báo lỗi / Liên hệ / Hợp tác / Quảng cáo

5
    

BÀI VIẾT HAY

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 29/30
9/17/22, 10:11 PM Học nhanh Python trong 30 phút | Học Python và Numpy

Bài 1. Giới thiệu khóa học “Học C Bá Đạo”


21/07/2019

1000 bài tập lập trình C/C++ có lời giải của thầy Khang
25/12/2019

Kiểm tra số nguyên tố sử dụng C/C++ và Java


15/07/2018

CHUYÊN MỤC HAY

Học C/C++ 199

Học Python 48

Học Java 45

Học Javascript 37

Khóa học 34

Chia sẻ 27

Học Web 26

Học C# 25

- BẠN BÈ & ĐỐI TÁC -

Luyện Code - Tự Học Đồ Họa - Cách Học Lập Trình - VNTALKING

© 2018-2020. Bản quyền thuộc Lập Trình Không Khó. Privacy & Terms

https://blog.luyencode.net/hoc-nhanh-python-trong-30-phut/ 30/30

You might also like