Hướng dẫn how do you find the sparse matrix in python? - làm thế nào để bạn tìm thấy ma trận thưa thớt trong python?
Gói mảng thưa thớt Scipy 2-D cho dữ liệu số. Show
Ghi chú Gói này đang chuyển sang giao diện mảng, tương thích với các mảng numpy, từ giao diện ma trận cũ hơn. Chúng tôi khuyên bạn nên sử dụng các đối tượng mảng ( >>> np.dot(A.toarray(), v) array([ 1, -3, -1], dtype=int64)0, v.v.) cho tất cả các công việc mới. Khi sử dụng giao diện mảng, xin lưu ý rằng:
Các tiện ích xây dựng ( >>> np.dot(A.toarray(), v) array([ 1, -3, -1], dtype=int64)3, >>> np.dot(A.toarray(), v) array([ 1, -3, -1], dtype=int64)4, >>> np.dot(A.toarray(), v) array([ 1, -3, -1], dtype=int64)5, >>> np.dot(A.toarray(), v) array([ 1, -3, -1], dtype=int64)6, v.v.) vẫn chưa được chuyển, nhưng kết quả của chúng có thể được gói thành các mảng: Contents#Các lớp mảng thưa thớt#
Các lớp ma trận thưa thớt#
Functions#Xây dựng ma trận thưa thớt:
Lưu và tải ma trận thưa thớt:
Công cụ ma trận thưa thớt:
Xác định ma trận thưa thớt:
Submodules#
Exceptions#
Thông tin sử dụng#Có bảy loại ma trận thưa thớt có sẵn:
Để xây dựng một ma trận một cách hiệu quả, hãy sử dụng DOK_MATRIX hoặc LIL_MATRIX. Lớp LIL_MATRIX hỗ trợ cắt lát cơ bản và lập chỉ mục ưa thích với một cú pháp tương tự như các mảng numpy. Như được minh họa dưới đây, định dạng COO cũng có thể được sử dụng để xây dựng ma trận hiệu quả. Mặc dù sự tương đồng của chúng với các mảng numpy, nhưng việc sử dụng các chức năng numpy trực tiếp trên các ma trận này không có thể chuyển đổi đúng cách cho các tính toán, dẫn đến kết quả bất ngờ (và không chính xác). Nếu bạn muốn áp dụng chức năng numpy cho các ma trận này, trước tiên hãy kiểm tra xem Scipy có triển khai riêng cho lớp ma trận thưa thớt đã cho hay chuyển đổi ma trận thưa Đầu tiên trước khi áp dụng phương pháp.strongly discouraged to use NumPy functions directly on these matrices because NumPy may not properly convert them for computations, leading to unexpected (and incorrect) results. If you do want to apply a NumPy function to these matrices, first check if SciPy has its own implementation for the given sparse matrix class, or convert the sparse matrix to a NumPy array (e.g., using the toarray() method of the class) first before applying the method. Để thực hiện các thao tác như phép nhân hoặc đảo ngược, trước tiên hãy chuyển đổi ma trận thành định dạng CSC hoặc CSR. Định dạng LIL_MATRIX dựa trên hàng, do đó chuyển đổi sang CSR là hiệu quả, trong khi chuyển đổi sang CSC là ít hơn. Tất cả các chuyển đổi giữa các định dạng CSR, CSC và COO là các hoạt động hiệu quả, thời gian tuyến tính. Sản phẩm vector ma trận#Để thực hiện một sản phẩm vectơ giữa ma trận thưa thớt và vectơ chỉ cần sử dụng phương thức DOT ma trận, như được mô tả trong tài liệu của nó: >>> import numpy as np >>> from scipy.sparse import csr_matrix >>> A = csr_matrix([[1, 2, 0], [0, 0, 3], [4, 0, 5]]) >>> v = np.array([1, 0, -1]) >>> A.dot(v) array([ 1, -3, -1], dtype=int64) Cảnh báo Kể từ Numpy 1.7, NP.DOT không biết về ma trận thưa thớt, do đó sử dụng nó sẽ dẫn đến kết quả hoặc lỗi không mong muốn. Thay vào đó, mảng dày đặc tương ứng phải được lấy trước tiên: thay vào đó: >>> np.dot(A.toarray(), v) array([ 1, -3, -1], dtype=int64) Nhưng sau đó tất cả các lợi thế hiệu suất sẽ bị mất. Định dạng CSR đặc biệt phù hợp cho các sản phẩm vector ma trận nhanh. Ví dụ 1#Xây dựng 1000x1000 lil_matrix và thêm một số giá trị vào nó: >>> from scipy.sparse import lil_matrix >>> from scipy.sparse.linalg import spsolve >>> from numpy.linalg import solve, norm >>> from numpy.random import rand >>> A = lil_matrix((1000, 1000)) >>> A[0, :100] = rand(100) >>> A[1, 100:200] = A[0, :100] >>> A.setdiag(rand(1000)) Bây giờ hãy chuyển đổi nó thành định dạng CSR và giải A x = B cho x: >>> A = A.tocsr() >>> b = rand(1000) >>> x = spsolve(A, b) Chuyển đổi nó thành một ma trận dày đặc và giải quyết, và kiểm tra xem kết quả có giống nhau không: >>> x_ = solve(A.toarray(), b) Bây giờ chúng ta có thể tính toán định mức của lỗi với: >>> err = norm(x-x_) >>> err < 1e-10 True Nó phải nhỏ :) Ví dụ 2#Xây dựng một ma trận ở định dạng COO: >>> from scipy import sparse >>> from numpy import array >>> I = array([0,3,1,0]) >>> J = array([0,3,1,2]) >>> V = array([4,5,7,9]) >>> A = sparse.coo_matrix((V,(I,J)),shape=(4,4)) Lưu ý rằng các chỉ số không cần phải được sắp xếp. Các mục trùng lặp (i, j) được tổng hợp khi chuyển đổi sang CSR hoặc CSC. >>> I = array([0,0,1,3,1,0,0]) >>> J = array([0,2,1,3,1,0,0]) >>> V = array([1,1,1,1,1,1,1]) >>> B = sparse.coo_matrix((V,(I,J)),shape=(4,4)).tocsr() Điều này rất hữu ích cho việc xây dựng độ cứng nguyên tố hữu hạn và ma trận khối lượng. Biết thêm chi tiết#Chỉ số cột CSR không nhất thiết phải được sắp xếp. Tương tự như vậy đối với các chỉ số hàng CSC. Sử dụng các phương thức .sorted_indices () và .sort_indices () khi các chỉ số được sắp xếp được yêu cầu (ví dụ: khi chuyển dữ liệu cho các thư viện khác). Làm thế nào để bạn tìm thấy sự thưa thớt của một ma trận?Số lượng các phần tử có giá trị bằng không chia cho tổng số phần tử (ví dụ: M × N cho ma trận M × N) được gọi là độ thưa của ma trận (bằng 1 trừ mật độ của ma trận). (e.g., m × n for an m × n matrix) is called the sparsity of the matrix (which is equal to 1 minus the density of the matrix).
Làm thế nào để bạn thêm một ma trận thưa thớt trong Python?Một cách đơn giản và hiệu quả để thêm ma trận thưa thớt là chuyển đổi chúng thành dạng bộ ba thưa thớt, nối các bộ ba, sau đó chuyển đổi trở lại định dạng cột thưa thớt.convert them to sparse triplet form, concatenate the triplets, and then convert back to sparse column format.
Làm thế nào để bạn viết một ma trận thưa thớt?S = thưa thớt (a) Chuyển đổi một ma trận đầy đủ thành dạng thưa thớt bằng cách vắt ra bất kỳ phần tử 0 nào.Nếu một ma trận chứa nhiều số không, việc chuyển đổi ma trận thành lưu trữ thưa thớt sẽ lưu bộ nhớ.S = thưa thớt (m, n) tạo ra một ma trận m -by -n tất cả không.. If a matrix contains many zeros, converting the matrix to sparse storage saves memory. S = sparse( m,n ) generates an m -by- n all zero sparse matrix.
Làm thế nào để bạn chuyển đổi một ma trận thành một ma trận thưa thớt trong Python?Approach:.. Tạo một danh sách trống sẽ đại diện cho danh sách ma trận thưa thớt .. Lặp qua ma trận 2D để tìm các phần tử không phải là không .. Nếu một phần tử không phải là 0, hãy tạo một danh sách trống tạm thời .. Nối giá trị hàng, giá trị cột và phần tử không phải là không vào danh sách tạm thời .. |