Ghi chú về NumPy trong Python (Quan trọng)

  1. Ý nghĩa của shape trong np.array: (2,) và (2,1)

Thuộc tính ndarray.shape trả về kích thước của mảng theo từng chiều dưới dạng một tuple chứa các số nguyên. Ví dụ, với mảng hai chiều, shape sẽ biểu thị số hàng và số cột.

Ví dụ:

dữ liệu = [[1, 2, 3], [4, 5, 6]]
x = numpy.array(dữ liệu)

print(x.shape) 
>> (2, 3) # x.shape là một tuple

x2 = x.reshape(x.shape + (1,)) # thêm một chiều mới
print(x2.shape)
>> (2, 3, 1)<br></br><br></br># phép cộng tuple<br></br>t1 = (1,2)<br></br>t2 = (3,4)<br></br>print(t1+t2)<br></br>>> (1,2,3,4)

Thông thường:

  • Mảng [1,2] có shape (2,) – tức là mảng một chiều với 2 phần tử.
  • Mảng [[1],[2]] có shape (2,1) – mảng hai chiều với 2 hàng và mỗi hàng chỉ có 1 phần tử.
  • Mảng [[1,2]] có shape (1,2) – mảng hai chiều với 1 hàng và 2 phần tử.

Số lượng cấp ngoặc vuông tương ứng với số chiều của mảng, cũng chính là số phần tử trong tuple shape.

  1. Trích xuất hàng hoặc cột từ ma trận
a = ([[0, 1, 2],
      [3, 4, 5],
      [6, 7, 8]])

Trích xuất hàng đầu tiên: a[0] cho kết quả [0, 1, 2], kiểu dữ liệu là mảng numpy với shape (3,).

Trích xuất cột đầu tiên: a[:, 0] cho kết quả [0, 3, 6], kiểu dữ liệu là mảng numpy với shape (3,).

  1. Tạo các loại ma trận đặc biệt

3.1) Hàm arange: np.arange(0,10) tạo ra mảng [0,1,2,3,4,5,6,7,8,9]. Đây là khoảng mở bên trái và đóng bên phải (không bao gồm 10).

3.2) Hàm reshape: np.arange(1,10).reshape((3,3)) thay đổi kích thước từ (3,3) thành (3,3) mà không chuyển vị, chỉ thay đổi kích thước trục. Số lượng phần tử trong mảng phải giữ nguyên. Nếu một trong các tham số là -1, reshape sẽ tự động tính toán kích thước còn lại.

3.3) Tạo mảng ngẫu nhiên: np.random.randint(0, 10, size=(3, 3)) tạo một ma trận 3x3 với các phần tử ngẫu nhiên từ 0 đến 9.

3.4) Cắt mảng: Có thể sử dụng slicing để lấy một phần của mảng.

3.5) Các ma trận đặc biệt:

  • np.ones((3,3)): tạo ma trận 3x3 toàn số 1.
  • np.zeros((3,3)): tạo ma trận 3x3 toàn số 0.
  • np.eye(3): tạo ma trận đơn vị 3x3.
  • np.diag([1,2,3]): tạo ma trận vuông với đường chéo chính là [1,2,3].

3.6) Tạo mảng với giá trị cố định: np.full((3, 3), 7, dtype=np.float32) tạo một mảng 3x3 với tất cả phần tử đều là 7.

  1. Phép toán giữa mảng và ma trận: np.multiply(), np.dot() và dấu *

4.1) np.multiply(): dùng để nhân từng phần tử của hai mảng hoặc ma trận. Kết quả có cùng kích thước với các mảng tham gia.

Ví dụ:

A = np.arange(1,5).reshape(2,2)
array([[1, 2],
       [3, 4]])

B = np.arange(0,4).reshape(2,2)
array([[0, 1],
       [2, 3]])

np.multiply(A,B)       # Nhân từng phần tử
array([[ 0,  2],
       [ 6, 12]])

Trường hợp ma trận:

np.multiply(np.mat(A),np.mat(B))     # Nhân từng phần tử giữa hai ma trận

matrix([[ 0,  2],
        [ 6, 12]])

np.sum(np.multiply(np.mat(A),np.mat(B)))    # Tổng các phần tử
20

4.2) np.dot(): dùng để thực hiện phép nhân ma trận. Khi áp dụng cho mảng, nó sẽ xử lý như phép nhân ma trận nếu kích thước phù hợp.

4.3) Dấu *: tùy vào đối tượng (mảng hay ma trận) mà thực hiện phép nhân tương ứng. Với mảng thì là nhân từng phần tử; với ma trận thì là nhân ma trận.

  1. Tìm giá trị lớn nhất và nhỏ nhất trong ndarray cùng chỉ số
# Giá trị lớn nhất<br></br>np.max(a)        # Lấy giá trị lớn nhất toàn cục<br></br>np.max(a,axis=0) # Lấy giá trị lớn nhất theo từng cột<br></br>np.max(a,axis=1) # Lấy giá trị lớn nhất theo từng hàng<br></br><br></br># Chỉ số của giá trị nhỏ nhất<br></br>np.argmin(a, axis=0)  # Chỉ số phần tử nhỏ nhất theo từng cột<br></br>np.argmin(a, axis=1)  # Chỉ số phần tử nhỏ nhất theo từng hàng

So sánh với danh sách Python:

list_a_max_list = max(list_a) # Lấy giá trị lớn nhất<br></br>max_index = list_a.index(max(list_a)) # Lấy chỉ số của giá trị lớn nhất

Thẻ: numpy python array Matrix reshape

Đăng vào ngày 8 tháng 8 lúc 07:52