csc_matrix、coo_matrix

Scipy中常見的幾類矩陣,包括lil_matrix和csc_matrix、coo_matrix,最近在研究網絡結構的表示學習,需要使用這些工具。

官方文檔其實已經講得比較詳細了,我這里再補充一點,把問題講得更加簡單明白。
csc_matrix:

Example

>>> import numpy as np
>>> from scipy.sparse import csc_matrix
>>> csc_matrix((3, 4), dtype=np.int8).toarray()
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]], dtype=int8)
>>>
>>> row = np.array([0, 2, 2, 0, 1, 2])
>>> col = np.array([0, 0, 1, 2, 2, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> csc_matrix((data, (row, col)), shape=(3, 3)).toarray()
array([[1, 0, 4],
       [0, 0, 5],
       [2, 3, 6]])

data是存儲的數據,矩陣以列來存儲,很多人學習完了線性代數,甚至不知道矩陣一般是以列還是以行來存儲。從向量Vector的角度來看,矩陣都應該以列方式來存儲,以列來理解和存儲更符合實際需要,我們常用的x = [1,2,3,5],在運算時都要進行一個轉置x^T。實際上Numpy中矩陣也是使用csc_matrix存儲。

row, col data這里的意思就顯而易見了, row[i], col[i]存儲的數據為data[i], 0行,0列 存儲了1; 2行,0列存儲了2; 2行,2列存儲了6.

>>> indptr = np.array([0, 2, 3, 6])
>>> indices = np.array([0, 2, 2, 0, 1, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> csc_matrix((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 4],
       [0, 0, 5],
       [2, 3, 6]])

這個略微復雜,但其實也非常容易理解: indptr表示的是indices矩陣里的開始和結尾的index, indptr [0, 2]表示indices[0:2]存儲了第一列的數據所位置0行和2行,indices[2:3]存儲了第二列的數據位置,即2,第2行(注意從0行開始), 每個indices[i]對應一個data[i]。注意Python list[0:i]取值為list[0....i-1]實際上indeces[0:2]只取了indices第一個和第二個數值0和2,代表數據在0和2行,其余位置皆為0;inices[2:3]取了indices[2]的數值2,代表數據在第2行,其余位置皆為0.

coo_matrix
這個就更容易了,給我一分鐘。直接上例子如下:即n行,m列存了data[i],其余位置皆為0.

>>> from scipy.sparse import coo_matrix
>>> coo_matrix((3, 4), dtype=np.int8).toarray()
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]], dtype=int8)
>>>
>>> row  = np.array([0, 3, 1, 0])
>>> col  = np.array([0, 3, 1, 2])
>>> data = np.array([4, 5, 7, 9])
>>> coo_matrix((data, (row, col)), shape=(4, 4)).toarray()
array([[4, 0, 9, 0],
       [0, 7, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 5]])

轉自csdn
參考文檔
https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csc_matrix.html#scipy.sparse.csc_matrix
https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.coo_matrix.html#scipy.sparse.coo_matrix

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • TF API數學計算tf...... :math(1)剛開始先給一個運行實例。tf是基于圖(Graph)的計算系統...
    MachineLP閱讀 3,547評論 0 1
  • 一.標準化的原因 通常情況下是為了消除量綱的影響。譬如一個百分制的變量與一個5分值的變量在一起怎么比較?只有通過數...
    readilen閱讀 1,493評論 0 0
  • 稀疏矩陣 稀疏矩陣(sparse matrix)是由于矩陣中存在大量0,從而可以采用特別的存儲技巧來壓縮內存。由于...
    JxKing閱讀 6,169評論 3 4
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,769評論 0 33
  • 1. tf函數 tensorflow 封裝的工具類函數 | 操作組 | 操作 ||:-------------| ...
    南墻已破閱讀 5,237評論 0 5