Hướng dẫn how do you store a sparse matrix in python? - làm thế nào để bạn lưu trữ một ma trận thưa thớt trong python?

Sau đây có thể hoạt động như một khái niệm chung, nhưng bạn sẽ phải tìm ra nhiều chi tiết ... trước tiên bạn nên làm quen với định dạng CSR, trong đó tất cả thông tin cho một mảng được lưu trữ trong 3 mảng, hai chiều dài Số lượng mục nhập khác không, một trong số các hàng với số lượng cộng với một:

>>> import scipy.sparse as sps
>>> a = sps.rand(10, 10, density=0.05, format='csr')
>>> a.toarray()
array([[ 0.        ,  0.46531486,  0.03849468,  0.51743202,  0.        ],
       [ 0.        ,  0.67028033,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.9967058 ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ]])
>>> a.data
array([ 0.46531486,  0.03849468,  0.51743202,  0.67028033,  0.9967058 ])
>>> a.indices
array([1, 2, 3, 1, 4])
>>> a.indptr
array([0, 3, 4, 4, 5, 5])

Vì vậy,

ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))
2 có các mục nhập khác không, theo thứ tự chính,
ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))
3 có các chỉ số cột tương ứng của các mục Non-Zero và
ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))
4 có các chỉ số bắt đầu vào hai mảng khác trong đó dữ liệu cho mỗi hàng bắt đầu, ví dụ:
ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))
5 và
ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))
6, vì vậy các mục khác không ở hàng thứ tư là
ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))
7 và các chỉ số cột của chúng
ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))
8.

Vì vậy, bạn có thể lưu trữ ba mảng này trong đĩa và truy cập chúng dưới dạng memmaps, và sau đó bạn có thể truy xuất các hàng m qua n như sau:

ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))

Như một bằng chứng chung về khái niệm:

>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
>>> c[20:25].toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])

Gói mảng thưa thớt Scipy 2-D cho dữ liệu số.

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 (

ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))
9,
>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
>>> c[20:25].toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
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 = sps.rand(1000, 10, density=0.5, format='csr')
    >>> ip = c.indptr[20:25+1].copy()
    >>> d = c.data[ip[0]:ip[-1]]
    >>> i = c.indices[ip[0]:ip[-1]]
    >>> ip -= ip[0]
    >>> rows = sps.csr_matrix((d, i, ip))
    >>> rows.toarray()
    array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
             0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
           [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
             0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
           [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
             0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
           [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
             0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
           [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
             0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
    >>> c[20:25].toarray()
    array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
             0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
           [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
             0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
           [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
             0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
           [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
             0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
           [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
             0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
    
    1 không còn thực hiện phép nhân ma trận, mà là phép nhân theo phần tử (giống như với các mảng numpy). Để làm cho mã hoạt động với cả mảng và ma trận, hãy sử dụng
    >>> c = sps.rand(1000, 10, density=0.5, format='csr')
    >>> ip = c.indptr[20:25+1].copy()
    >>> d = c.data[ip[0]:ip[-1]]
    >>> i = c.indices[ip[0]:ip[-1]]
    >>> ip -= ip[0]
    >>> rows = sps.csr_matrix((d, i, ip))
    >>> rows.toarray()
    array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
             0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
           [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
             0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
           [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
             0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
           [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
             0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
           [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
             0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
    >>> c[20:25].toarray()
    array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
             0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
           [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
             0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
           [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
             0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
           [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
             0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
           [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
             0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
    
    2 để nhân ma trận.

  • Các hoạt động như tổng, được sử dụng để tạo ra các ma trận dày đặc, hiện tạo ra các mảng, có hành vi nhân khác nhau khác nhau.

  • Mảng thưa thớt hiện phải có hai chiều. Điều này cũng có nghĩa là tất cả các hoạt động cắt trên các đối tượng này phải tạo ra kết quả hai chiều hoặc chúng sẽ dẫn đến lỗi. Điều này sẽ được giải quyết trong một phiên bản trong tương lai.

Các tiện ích xây dựng (

>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
>>> c[20:25].toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
3,
>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
>>> c[20:25].toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
4,
>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
>>> c[20:25].toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
5,
>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
>>> c[20:25].toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
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#

ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))
9(arg1[, shape, dtype, copy, blocksize])

Khối mảng hàng thưa thớt

>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
>>> c[20:25].toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
0(arg1[, shape, dtype, copy])

Một mảng thưa thớt ở định dạng tọa độ.

>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
>>> c[20:25].toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
9(arg1[, shape, dtype, copy])

Mảng cột thưa thớt né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)
0(arg1[, shape, dtype, copy])

Mảng hàng thưa thớt né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)
1(arg1[, shape, dtype, copy])

Mảng thưa thớt với lưu trữ đường chéo

>>> 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)
2(arg1[, shape, dtype, copy])

Từ điển của mảng thưa thớt dựa trên chìa khóa.

>>> 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)
3(arg1[, shape, dtype, copy])

Danh sách danh sách dựa trên hàng

Các lớp ma trận thưa thớt#

>>> 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)
4(arg1[, shape, dtype, copy, blocksize])

Chặn ma trận hàng thưa thớt

>>> 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)
5(arg1[, shape, dtype, copy])

Một ma trận thưa thớt ở định dạng tọa độ.

>>> 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)
6(arg1[, shape, dtype, copy])

Ma trận cột thưa thớt né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)
7(arg1[, shape, dtype, copy])

Ma trận hàng thưa thớt né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)
8(arg1[, shape, dtype, copy])

Ma trận thưa thớt với lưu trữ đường chéo

>>> 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)
9(arg1[, shape, dtype, copy])

Từ điển của ma trận thưa thớt dựa trên chìa khóa.

>>> np.dot(A.toarray(), v)
array([ 1, -3, -1], dtype=int64)
0(arg1[, shape, dtype, copy])

Danh sách danh sách dựa trên hàng Ma trận thưa thớt

>>> np.dot(A.toarray(), v)
array([ 1, -3, -1], dtype=int64)
1([maxprint])

Lớp này cung cấp một lớp cơ sở cho tất cả các ma trận thưa thớt.

Functions#

Xây dựng ma trận thưa thớt:

>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
>>> c[20:25].toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
3(m[, n, k, dtype, format])

Ma trận thưa thớt với các con đường chéo

>>> np.dot(A.toarray(), v)
array([ 1, -3, -1], dtype=int64)
3(n[, dtype, format])

Ma trận nhận dạng ở định dạng thưa thớt

>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
>>> c[20:25].toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
4(A, B[, format])

sản phẩm kronecker của ma trận thưa thớt a và b

>>> np.dot(A.toarray(), v)
array([ 1, -3, -1], dtype=int64)
5(A, B[, format])

tổng hợp kronecker của ma trận thưa thớt a và b

>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
>>> c[20:25].toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
6(diagonals[, offsets, shape, format, dtype])

Xây dựng một ma trận thưa thớt từ các đường chéo.

>>> np.dot(A.toarray(), v)
array([ 1, -3, -1], dtype=int64)
7(data, diags[, m, n, format])

Trả về một ma trận thưa thớt từ các đường chéo.

>>> np.dot(A.toarray(), v)
array([ 1, -3, -1], dtype=int64)
8(mats[, format, dtype])

Xây dựng một ma trận thưa thớt đường chéo từ các ma trận được cung cấp.

>>> np.dot(A.toarray(), v)
array([ 1, -3, -1], dtype=int64)
9(A[, k, format])

Trả về phần hình tam giác thấp hơn của ma trận ở định dạng thưa thớt

>>> from scipy.sparse import lil_matrix
>>> from scipy.sparse.linalg import spsolve
>>> from numpy.linalg import solve, norm
>>> from numpy.random import rand
0(A[, k, format])

Trả về phần hình tam giác phía trên của ma trận ở định dạng thưa thớt

>>> from scipy.sparse import lil_matrix
>>> from scipy.sparse.linalg import spsolve
>>> from numpy.linalg import solve, norm
>>> from numpy.random import rand
1(blocks[, format, dtype])

Xây dựng một ma trận thưa thớt từ các khối phụ thưa thớt

>>> from scipy.sparse import lil_matrix
>>> from scipy.sparse.linalg import spsolve
>>> from numpy.linalg import solve, norm
>>> from numpy.random import rand
2(blocks[, format, dtype])

Stack Ma trận thưa thớt theo chiều ngang (cột khôn ngoan)

>>> from scipy.sparse import lil_matrix
>>> from scipy.sparse.linalg import spsolve
>>> from numpy.linalg import solve, norm
>>> from numpy.random import rand
3(blocks[, format, dtype])

Stack Ma trận thưa thớt theo chiều dọc (hàng khôn ngoan)

>>> from scipy.sparse import lil_matrix
>>> from scipy.sparse.linalg import spsolve
>>> from numpy.linalg import solve, norm
>>> from numpy.random import rand
4(m, n[, density, format, dtype, ...])

Tạo một ma trận thưa thớt của hình dạng và mật độ đã cho với các giá trị phân phối đồng đều.

>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
>>> c[20:25].toarray()
array([[ 0.        ,  0.        ,  0.        ,  0.        ,  0.55683501,
         0.61426248,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.67789204,  0.        ,  0.71821363,
         0.01409666,  0.        ,  0.        ,  0.58965142,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.1575835 ,  0.08172986,
         0.41741147,  0.72044269,  0.        ,  0.72148343,  0.        ],
       [ 0.        ,  0.73040998,  0.81507086,  0.13405909,  0.        ,
         0.        ,  0.82930945,  0.71799358,  0.8813616 ,  0.51874795],
       [ 0.43353831,  0.00658204,  0.        ,  0.        ,  0.        ,
         0.10863725,  0.        ,  0.        ,  0.        ,  0.57231074]])
5(m, n[, density, format, dtype, ...])

Tạo một ma trận thưa thớt của hình dạng và mật độ đã cho với các giá trị phân phối ngẫu nhiên.

Lưu và tải ma trận thưa thớt:

>>> from scipy.sparse import lil_matrix
>>> from scipy.sparse.linalg import spsolve
>>> from numpy.linalg import solve, norm
>>> from numpy.random import rand
6(file, matrix[, compressed])

Lưu ma trận thưa thớt vào một tệp bằng định dạng

>>> from scipy.sparse import lil_matrix
>>> from scipy.sparse.linalg import spsolve
>>> from numpy.linalg import solve, norm
>>> from numpy.random import rand
7.

>>> from scipy.sparse import lil_matrix
>>> from scipy.sparse.linalg import spsolve
>>> from numpy.linalg import solve, norm
>>> from numpy.random import rand
8(file)

Tải ma trận thưa thớt từ một tệp bằng định dạng

>>> from scipy.sparse import lil_matrix
>>> from scipy.sparse.linalg import spsolve
>>> from numpy.linalg import solve, norm
>>> from numpy.random import rand
7.

Công cụ ma trận thưa thớt:

>>> A = lil_matrix((1000, 1000))
>>> A[0, :100] = rand(100)
>>> A[1, 100:200] = A[0, :100]
>>> A.setdiag(rand(1000))
0(A)

Trả về các chỉ số và giá trị của các phần tử khác của ma trận

Xác định ma trận thưa thớt:

>>> A = lil_matrix((1000, 1000))
>>> A[0, :100] = rand(100)
>>> A[1, 100:200] = A[0, :100]
>>> A.setdiag(rand(1000))
1(x)

X có phải là loại ma trận thưa thớt không?

>>> A = lil_matrix((1000, 1000))
>>> A[0, :100] = rand(100)
>>> A[1, 100:200] = A[0, :100]
>>> A.setdiag(rand(1000))
2(x)

X có phải là loại ma trận thưa thớt không?

>>> A = lil_matrix((1000, 1000))
>>> A[0, :100] = rand(100)
>>> A[1, 100:200] = A[0, :100]
>>> A.setdiag(rand(1000))
3(x)

X của CSC_Matrix có phải là loại không?

>>> A = lil_matrix((1000, 1000))
>>> A[0, :100] = rand(100)
>>> A[1, 100:200] = A[0, :100]
>>> A.setdiag(rand(1000))
4(x)

X của loại csr_matrix có phải là không?

>>> A = lil_matrix((1000, 1000))
>>> A[0, :100] = rand(100)
>>> A[1, 100:200] = A[0, :100]
>>> A.setdiag(rand(1000))
5(x)

X có phải là loại BSR_Matrix không?

>>> A = lil_matrix((1000, 1000))
>>> A[0, :100] = rand(100)
>>> A[1, 100:200] = A[0, :100]
>>> A.setdiag(rand(1000))
6(x)

X của lil_matrix loại?

>>> A = lil_matrix((1000, 1000))
>>> A[0, :100] = rand(100)
>>> A[1, 100:200] = A[0, :100]
>>> A.setdiag(rand(1000))
7(x)

X của DOK_MATRIX có phải là loại không?

>>> A = lil_matrix((1000, 1000))
>>> A[0, :100] = rand(100)
>>> A[1, 100:200] = A[0, :100]
>>> A.setdiag(rand(1000))
8(x)

X của COO_Matrix có phải là loại không?

>>> A = lil_matrix((1000, 1000))
>>> A[0, :100] = rand(100)
>>> A[1, 100:200] = A[0, :100]
>>> A.setdiag(rand(1000))
9(x)

X của Dia_Matrix có phải là loại không?

Submodules#

>>> A = A.tocsr()
>>> b = rand(1000)
>>> x = spsolve(A, b)
0

Các thói quen đồ thị thưa thớt nén (scipy.sparse.csgraph)

>>> A = A.tocsr()
>>> b = rand(1000)
>>> x = spsolve(A, b)
1

Đại số tuyến tính thưa thớt (scipy.sparse.linalg)

Exceptions#

>>> A = A.tocsr()
>>> b = rand(1000)
>>> x = spsolve(A, b)
2

>>> A = A.tocsr()
>>> b = rand(1000)
>>> x = spsolve(A, b)
3

Thông tin sử dụng#

Có bảy loại ma trận thưa thớt có sẵn:

  1. CSC_Matrix: Định dạng cột thưa thớt nén

  2. CSR_Matrix: Định dạng hàng thưa thớt nén

  3. BSR_MATRIX: Định dạng hàng thưa thớt

  4. LIL_MATRIX: Danh sách định dạng danh sách

  5. DOK_MATRIX: Dictionary of Keys định dạng

  6. COO_Matrix: Định dạng tọa độ (còn gọi là IJV, định dạng bộ ba)

  7. Dia_Matrix: Định dạng đường chéo

Để 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:

ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))
0

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.

ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))
1

Đ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 lưu trữ ma trận thưa thớt?

Một ma trận thưa thớt có thể được lưu trữ ở chế độ lưu trữ toàn bộ ma trận hoặc chế độ lưu trữ được đóng gói. Khi một ma trận thưa thớt được lưu trữ trong chế độ lưu trữ toàn bộ ma trận, tất cả các phần tử của nó, bao gồm cả các phần tử bằng 0, được lưu trữ trong một mảng.full-matrix storage mode or a packed storage mode. When a sparse matrix is stored in full-matrix storage mode, all its elements, including its zero elements, are stored in an array.

Làm thế nào để bạn đại diện cho một ma trận thưa thớt trong Python?

Hàm csr_matrix () được sử dụng để tạo một ma trận thưa thớt của định dạng hàng thưa thớt trong khi CSC_Matrix () được sử dụng để tạo một ma trận thưa thớt của định dạng cột thưa thớt.csr_matrix() is used to create a sparse matrix of compressed sparse row format whereas csc_matrix() is used to create a sparse matrix of compressed sparse column format.

Làm thế nào để Python xử lý ma trận thưa thớt?

Ma trận thưa thớt trong Python..
Nhập Numpy dưới dạng NP ..
từ Scipy.Nhập CSR_Matrix thưa thớt ..
# Tạo biểu diễn 2 chiều của ma trận ..
A = np.Mảng ([[1, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 1], \.
[0, 0, 0, 2, 0, 0]]).
in ("Biểu diễn ma trận dày đặc: \ n", a).

Ma trận thưa thớt được lưu trữ trong cơ sở dữ liệu như thế nào?

Cơ sở dữ liệu để lưu trữ ma trận thưa thớt..
Chèn song song của các cặp (cột) ..
Truy xuất nhanh toàn bộ hàng hoặc cột ..
Truy vấn nhanh sự tồn tại của một cặp (cột) ..
Một khách hàng ruby nếu có thể ..