Bài hướng dẫn Học nhanh Python trong 30 phútnày được dịch lại từ Python Numpy Tutorial thuộc khóa học lập trình pythoncủa đại học StanFord. Nếu bạn có khả năng đọ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!
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ảo 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.
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. Đâylà 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 2 3 4 5 6 7 8 9 10 11 12 |
def quicksort[arr]: if len[arr] không làm gì hết print[len[animals]] # Prints "3" animals.remove['cat'] # Xóa phần tử khỏi set print[len[animals]] # Prints "2" |
Như thường lệ, mọi thứ bạn cần về set có thể xem tại đây.
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 2 3 4 5 |
animals = {'cat', 'dog', 'fish'} for idx, animal in enumerate[animals]: print['#%d: %s' % [idx + 1, animal]] # Prints "#1: fish", "#2: dog", "#3: cat" |
Set comprehensions:Giống như list và dictionaries, chúng ta có thể dễ dàng xây dựng sets sử dụngset comprehensions:
0 1 2 3 4 |
from math import sqrt nums = {int[sqrt[x]] for x in range[30]} print[nums]# Prints "{0, 1, 2, 3, 4, 5}" |
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 2 3 4 5 6 |
d = {[x, x + 1]: x for x in range[10]}# Tạo một dict với keys là tuple t = [5, 6]# Tạo 1 tuple print[type[t]]# Prints "" print[d[t]] # Prints "5" print[d[[1, 2]]]# Prints "1" |
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 2 3 4 5 6 7 8 9 10 11 12 |
def sign[x]: if x > 0: return 'positive' elif x vector, 2-D array ma trận, ] được gọi là rank của numpy array. Và shapecủ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ử.
Numpy cũng có sẵn rất nhiều hàm hỗ trợ tạo numpy array:
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:
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:
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ụ:
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:
Boolean array indexing:Boolean array indexing cho phép bạn chọn ra 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ụ:
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ệuTấ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ụ:
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 arrayCá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:
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:
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:
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 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 Tcủa đối tượng mảng:
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. BroadcastingBroadcasting 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:
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:
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ụngbroadcasting:
Bằng cách dùng Broadcasting, dòng codey = x + vvẫn làm việc thậm chíxcó kích thước[4, 3]vàvcó kích thước[3,]. Nguyên tắcBroadcast thực thi trên 2 mảng theo quy tắc sau:
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:
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ề NumpyNhữ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é. SciPyNumpy 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 được xâ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]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 đó:
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. MATLAB filesCác hàmscipy.io.loadmatvà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ểmScipy đị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àmscipy.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.
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êmtrong 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 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. MatplotlibMatplotlib 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ụ:
Sau khi chạy bạn sẽ thu được kết quả như sau: 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ó thể làm rất là đơn giản như sau:
Kết quả sau khi chạy như sau: Bạn có thể đọc thêm thông tin về hàmplottrong 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àmsubplot. Đây là một ví dụ:
Và bạn có thể thấy kết quả như hình sau: Bạn có thể đọc nhiều hơn thông tin về hàmsubplottrong tài liệu này. Hình ảnhBạn có thể dùng hàmimshowcủa thư viện matplotlib để hiển thị hình ảnh. Đây là một ví dụ:
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 pythonCác bạn cũng có thể tham khảo thêm nhiều khóa học hay khác tại website: //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:
Nếu bạ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 đó. Video liên quanChủ Đề |