Cách chuyển đổi numpy.matrix hoặc mảng thành ma trận thưa thớt scipy


83

Đối với ma trận thưa thớt SciPy, người ta có thể sử dụng todense()hoặc toarray()chuyển đổi thành ma trận hoặc mảng NumPy. Các chức năng để thực hiện nghịch đảo là gì?

Tôi đã tìm kiếm, nhưng không biết từ khóa nào nên được nhấn đúng.

Câu trả lời:


122

Bạn có thể chuyển một mảng hoặc ma trận không có nhiều làm đối số khi khởi tạo một ma trận thưa thớt. Ví dụ: đối với ma trận CSR, bạn có thể làm như sau.

>>> import numpy as np
>>> from scipy import sparse
>>> A = np.array([[1,2,0],[0,0,3],[1,0,4]])
>>> B = np.matrix([[1,2,0],[0,0,3],[1,0,4]])

>>> A
array([[1, 2, 0],
       [0, 0, 3],
       [1, 0, 4]])

>>> sA = sparse.csr_matrix(A)   # Here's the initialization of the sparse matrix.
>>> sB = sparse.csr_matrix(B)

>>> sA
<3x3 sparse matrix of type '<type 'numpy.int32'>'
        with 5 stored elements in Compressed Sparse Row format>

>>> print sA
  (0, 0)        1
  (0, 1)        2
  (1, 2)        3
  (2, 0)        1
  (2, 2)        4

2
Còn về mảng có chiều cao hơn?
Nirmal

Tôi gặp lỗi bộ nhớ cho ma trận của mình (~ 25.000x25.000). Ngoài ra, việc tiêu thụ bộ nhớ nhảy như điên khi tôi áp dụngsparse.csr_matrix
Martin Thoma

22

Có một số lớp ma trận thưa thớt trong scipy.

bsr_matrix (arg1 [, shape, dtype, copy, blocksize]) Block
Sprse Row ma trận coo_matrix (arg1 [, shape, dtype, copy]) Ma trận thưa thớt ở định dạng COOrdinate.
csc_matrix (arg1 [, shape, dtype, copy]) Ma trận cột thưa thớt được nén
csr_matrix (arg1 [, shape, dtype, copy]) Ma trận hàng thưa thớt được nén
dia_matrix (arg1 [, shape, dtype, copy]) Ma trận thưa với lưu trữ
DIAgonal dok_matrix (arg1 [, shape, dtype, copy]) Dictionary Of Keys dựa trên ma trận thưa thớt.
lil_matrix (arg1 [, shape, dtype, copy]) Ma trận thưa thớt danh sách liên kết dựa trên hàng

Bất kỳ ai trong số họ đều có thể thực hiện chuyển đổi.

import numpy as np
from scipy import sparse
a=np.array([[1,0,1],[0,0,1]])
b=sparse.csr_matrix(a)
print(b)

(0, 0)  1
(0, 2)  1
(1, 2)  1

Xem http://docs.scipy.org/doc/scipy/reference/sparse.html#usage-information .


0

Đối với hàm nghịch đảo, inv(A)nhưng tôi không khuyên bạn nên sử dụng nó, vì đối với ma trận lớn, nó rất tốn kém về mặt tính toán và không ổn định. Thay vào đó, bạn nên sử dụng một xấp xỉ nghịch đảo, hoặc nếu bạn muốn giải Ax = b, bạn không thực sự cần A -1 .


4
Câu hỏi hỏi làm thế nào để tạo ma trận thưa thớt scipy bằng cách sử dụng ma trận / mảng numpy, không nghịch đảo như phép toán ma trận.
Virgil Ming
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.