Dữ liệu thưa thớt SciPy
Dữ liệu thưa thớt là gì
Dữ liệu thưa thớt là dữ liệu có hầu hết các phần tử không được sử dụng (các phần tử không mang bất kỳ thông tin nào).
Nó có thể là một mảng như thế này:
[1, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0]
Dữ liệu thưa thớt: là tập dữ liệu trong đó hầu hết các giá trị mục đều bằng 0.
Mảng dày đặc: ngược lại với mảng thưa thớt: hầu hết các giá trị không bằng 0.
Trong điện toán khoa học, khi xử lý đạo hàm riêng trong đại số tuyến tính, chúng ta sẽ gặp phải dữ liệu thưa thớt.
Cách làm việc với dữ liệu thưa thớt
SciPy có một mô-đun, scipy.sparse
cung cấp các hàm để xử lý dữ liệu thưa thớt.
Chủ yếu có hai loại ma trận thưa thớt mà chúng tôi sử dụng:
CSC - Cột thưa thớt được nén. Để tính toán hiệu quả, hãy cắt cột nhanh.
CSR - Hàng thưa thớt được nén. Để cắt hàng nhanh, sản phẩm vectơ ma trận nhanh hơn
Chúng tôi sẽ sử dụng ma trận CSR trong hướng dẫn này.
Ma trận CSR
Chúng ta có thể tạo ma trận CSR bằng cách chuyển một mảng vào hàm scipy.sparse.csr_matrix()
.
Ví dụ
Tạo ma trận CSR từ một mảng:
import numpy as np
from scipy.sparse import csr_matrix
arr = np.array([0, 0, 0, 0, 0, 1, 1, 0, 2])
print(csr_matrix(arr))
Hãy tự mình thử »Ví dụ trên trả về:
(0, 5) 1 (0, 6) 1 (0, 8) 2
Từ kết quả chúng ta có thể thấy rằng có 3 mục có giá trị.
Mục 1. nằm ở hàng 0
vị trí 5
và có giá trị 1
.
Mục 2. nằm ở hàng 0
vị trí 6
và có giá trị 1
.
Mục 3. nằm ở hàng 0
vị trí 8
và có giá trị 2
.
Phương pháp ma trận thưa thớt
Xem dữ liệu được lưu trữ (không phải mục 0) bằng thuộc tính data
:
Ví dụ
import numpy as np
from scipy.sparse import csr_matrix
arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])
print(csr_matrix(arr).data)
Hãy tự mình thử » Đếm các số khác 0 bằng phương thức count_nonzero()
:
Ví dụ
import numpy as np
from scipy.sparse import csr_matrix
arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])
print(csr_matrix(arr).count_nonzero())
Hãy tự mình thử » Loại bỏ các mục 0 khỏi ma trận bằng phương thức eliminate_zeros()
:
Ví dụ
import numpy as np
from scipy.sparse import csr_matrix
arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])
mat = csr_matrix(arr)
mat.eliminate_zeros()
print(mat)
Hãy tự mình thử » Loại bỏ các mục trùng lặp bằng phương thức sum_duplicates()
:
Ví dụ
Loại bỏ các bản sao bằng cách thêm chúng:
import numpy as np
from scipy.sparse import csr_matrix
arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])
mat = csr_matrix(arr)
mat.sum_duplicates()
print(mat)
Hãy tự mình thử » Chuyển đổi từ csr sang csc bằng phương thức tocsc()
:
Ví dụ
import numpy as np
from scipy.sparse import csr_matrix
arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])
newarr = csr_matrix(arr).tocsc()
print(newarr)
Hãy tự mình thử »Lưu ý: Ngoài các phép toán cụ thể thưa thớt đã đề cập, ma trận thưa thớt hỗ trợ tất cả các phép toán mà ma trận thông thường hỗ trợ, ví dụ như định hình lại, tính tổng, số học, phát sóng, v.v.