Ma trận: là một mảng 2 chiều. Trong Python mảng 2 chiều có thể xem là một List của List. Ví dụ: A= 1,2,3, 4,5,6, 7,8,9 Kích thước: Kích thước của 1 ma trận = số hàng số cột. Ví dụ: Ma trận B có 4 hàng và 3 cột, ta gọi là ma trận 4 x 3 Ta cũng có thể hiểu ma trận là một sheet với số hàng và số cột nhất định trong excel. Vector: là ma trận với 1 cột và nhiều hàng (n 1) Kích thước: (còn được gọi là chiều vector – vector dimension) là số hàng của vector.
Scientific Programming Language NGƠN NGỮ LẬP TRÌNH LẬP TRÌNH P TRÌNH KHOA HỌCC Nguyễn Mạnh Cường Scientific Programming Language BÀI TÍNH TỐN TRÊN VÉC TƠ VÀ MA TRẬN (VECTOR & MATRIX) Scientific Programming Language BÀI TÍNH TỐN TRÊN VÉC TƠ VÀ MA TRẬN BÀI - • o Array creating (tạo mảng) Creating o Array indexing (chỉ số mảng) Indexing Operation Numpy o Array operations (các thao tác mảng) • Scipy: high-level scientific computing (Đọc thêm) • Pandas: Python Data Analysis Library (Đọc thêm) Bài 5: Matrix & Vector Scientific Programming Language Create array – Tạo mảng • Tạo mảng với Numpy BÀI Creating Indexing Operation o import numpy as np o Khởi tạo mảng chiều (vector): A = np.array([1, 2, 3, 4, 5]) o Khởi tạo mảng hai chiều (matrix): B = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 8, 7, 6]]) o Các thông số: A.ndim, A.shape, len(A), A.itemsize, A.dtype, A.size Bài 5: Matrix & Vector Scientific Programming Language Create array – Tạo mảng • Tạo mảng với Numpy BÀI - o Hàm khởi tạo mảng Creating np.arange(n), np.arange(start, end, step), Indexing Operation np.arange() np.linspace() np.linspace(start, numpoints) np.linspace(start, end exclusive end, end, numpoints, endpoint=False) Bài 5: Matrix & Vector Scientific Programming Language Create array – Tạo mảng • Tạo mảng với Numpy BÀI - o Hàm khởi tạo mảng Creating np.ones(), np.zeros(), np.eye(), np.diag() np.ones(n), np.ones((3,3)) np.zeros(n), np.zeros((3,3)) np.eye(n) ma trận đơn vị size n np.diag([1, 2, 3, 4]) ma trận đường Indexing Operation np.random chéo Khởi tạo ngẫu nhiên np.random.rand(n) np.random.randn(n) Ngẫ u nhiên n phẫ n tư! [0, 1] Ngẫ u nhiên n phẫ n tư! theo phẫn bố) Gauss np.random.seed(n) Bật chê) đố) seed cho hàm random Bài 5: Matrix & Vector Scientific Programming Language Create array – Tạo mảng BÀI TẬP 5.1 BÀI - o Tạo mảng numpy a(5) với phần tử nguyên In mảng hình; Tạo mảng b với n phần tử, phần tử nằm đoạn [1, 10] In mảng hình o Tạo ma trận c(3 x 5) số nguyên Cho biết: số chiều, kích thước chiều, kiểu phần tử mảng o Tạo ma trận đơn vị d(nxn) In ma trận hình; Tạo ma trận đường chéo e(nxn) với giá trị đường chéo lấy từ mảng chiều In mảng hình o Tạo mảng chiều f(n) với giá trị tuân theo phân bố chuẩn (Gauss) In mảng hình Creating Indexing Operation Bài 5: Matrix & Vector Scientific Programming Language Array index– Chỉ số mảng • Truy cập mảng theo số BÀI Creating Indexing Operation o Mảng 1-D a = np.array([1, 2, 3, 4, 5]) Index: i = 0, n-1 o Mảng 2-D b = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) b[0, 0] = 1, b[0, 1] = 2, b[1, 2] = 7, • Mảng 0-D hay Scalar: phần tử mảng a = 42 Bài 5: Matrix & Vector Scientific Programming Language Array index– Chỉ số mảng • Truy cập mảng theo số BÀI Creating o Slicing: sử dụng dấu ‘:’ list a = [1 5] • a[1:3] [2 3], Indexing • a[:] [1 5] Operation • a[2:] [3 5] • a[:2] [1 2] • a[start : end] • a[start : end step] : Bài 5: Matrix & Vector Scientific Programming Language Array index– Chỉ số mảng • Truy cập mảng theo số BÀI Creating o Slicing mảng hai chiều: • [6, 7, 8, 9, 10]]) Indexing Operation a = np.array([[1, 2, 3, 4, 5], • print(a[1, 1:4]) [7, 8, 9] a = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) print(a[0:2, 2]) • [3, 8] arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) print(arr[0:2, 1:4]) [[2 3 4] [7 8 9]] Bài 5: Matrix & Vector 10 Scientific Programming Language BÀI Creating Array operation – Thao tác mảng • Các thao tác mảng o Numerical operations: Các thao tác số học Indexing Thao tác tất phần tử (Scalar) a=a+3 a = a-3 a=a+b a = a-b a>b a == b Operation a = a*3 a = a*b a = a/3 a = a/b a = a**3 Nhân hai ma trận c = a.dot(b) Số cột a phải số dòng b Bài 5: Matrix & Vector 13 Scientific Programming Language BÀI Creating Indexing Array operation – Thao tác mảng • Các thao tác mảng o Reshape: Định hình lại mảng Shape: số phần tử chiều Reshape: From 1-D to 2-D a = Operation np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) Cẫ n đa!m ba!o số) phẫ n tư! cu!a ma!ng a b b = a.reshape(4, 3) b(4×3) flattening: from 2-D to 1-D a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.reshape(a, -1) 6] b = a.flatten() b = [1 Bài 5: Matrix & Vector 14 Scientific Programming Language BÀI Creating Indexing Operation Array operation – Thao tác mảng BÀI TẬP 5.3 o Nhập vào từ bàn phím hai mảng số nguyên a(n) b(n) kích thước In hai mảng hình o Cho biết số mà hai phần tử tương ứng hai mảng o Tăng phần tử b lên đơn vị, in mảng kết hình o Chuyển mảng b thành mảng hai chiều, cho biết ndim shape mảng kết o Chuyển mảng hai chiều mảng chiều, in kết hình Bài 5: Matrix & Vector 15 Scientific Programming Language BÀI Creating Array operation – Thao tác mảng • Các thao tác mảng o Iterating Arrays: Duyệt mảng Indexing Duyệt mảng chiều a = np.array([1, 2, 3]) for x in a: print(x) #duyệt theo giá trị for i in range(a.size): print(a[i]) Operation số Duyệt mảng chiều #duyệt theo chi a = np.array([[1, 2, 3], [4, 5, 6]]) for x in a: for i in range(len(a)): for y in x: for j in range(a.itemsize): print(y) print(a[i, j]) Bài 5: Matrix & Vector 16 Scientific Programming Language BÀI Creating Array operation – Thao tác mảng • Các thao tác mảng o Iterating Arrays: Duyệt mảng a = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) for x in np.nditer(a): print(x) Indexing Operation Duyệt mảng nditer() Duyệt mảng với số ndenumerate() a = np.array([1, 2, 3]) a = np.array([[1, 2, 3, 4], for idx, [5, 6, 7, 8]]) x in np.ndenumerate(a): for idx, x in np.ndenumerate(a): print(idx, x) print(idx, x) Bài 5: Matrix & Vector 17 Scientific Programming Language BÀI Creating Array operation – Thao tác mảng • Các thao tác mảng o Join & Split: Nối, tách mảng Nối mảng với concatenate() a = np.array([1, 2, 3]) Indexing b = np.array([4, 5, 6]) c = np.concatenate((a, b)) Operation print(c) c = [1 6] Nối mảng hai chiều: a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) axis=1 a b axis=0 a b c = np.concatenate((a, b), axis=1) Bài 5: Matrix & Vector 18 Scientific Programming Language BÀI Creating Indexing Array operation – Thao tác mảng • Các thao tác mảng o Join & Split: Nối, tách mảng Tách mảng thành nhiều mảng với array_split() a = np.array([1, 2, 3, 4, 5, 6]) b = np.array_split(a, 3) b chứa ma 2ng b[0] = [1 2], b[1] = [3 4], b[2] = [5 6] Operation Tách mảng hai chiều: Tách theo chiều ngang a = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]]) b = np.array_split(a, 3) b[0](thêm = [[1 axis=12], tách[3 theo4]] chiều dọc) b[1] = [[5 6], [7 8]] Bài 5: Matrix & Vector 19 Scientific Programming Language BÀI Creating Indexing Operation Array operation – Thao tác mảng BÀI TẬP 5.4 o Nhập vào mảng a gồm n phần tử nguyên từ phím Mảng a gọi tăng a[i] = a[i+1], tăng ngặt a[i] < a[i+1], giảm ngặt a[i] > a[i+1] i = n-1; lại chưa Hãy kiểm tra xem mảng a chưa? Sắp theo kiểu gì? o Tách mảng a thành mảng b, c, d In ba mảng kết hình o Nối ba mảng lại theo thứ tự d, c, b thu mảng e in kết hình o Chuyển mảng e thành mảng hai chiều, sau cắt hai dịng In kết Bài 5: Matrix & Vector 20