# encoding: utf-8
#!/usr/bin/python
#doctest: +ELLIPSIS
from scipy import sparse
# 注意此方法產生的稀疏矩陣不變,且只能轉換成array
row = range(2, 5)
col = range(7, 10)
data = [x for x in range(0, 6) if x%2]
c = sparse.coo_matrix((data, (row, col)), shape=(6, 12))
print(c, c.toarray(), sep='\n')
import numpy as np
# dok_matrix和lil_matrix適用於逐漸添加矩陣元素
# doc_matrix採用字典
S = sparse.dok_matrix((5, 5), dtype=np.float32)
for i in range(5):
for j in range(5):
S[i, j] = (i % 2) + (j % 2)
print(S, S.toarray(), sep='\n')
# lil_matrix是使用兩個列表儲存非0元素
L = sparse.lil_matrix((6, 5))
L[2, 3] = 1
L[3, 4] = 2
L[3, 2] = 3
print(L, L.toarray(), sep='\n')
# 其實都是初始化出一個固定大小矩陣 然後對應賦值,內部python都做好了
# dia_matrix 是對角線儲存方式 拿S爲例
data = np.zeros((5, 5))
for i in range(5):
for j in range(5):
data[i, j] = i
# 原先對應行的第一個元素,在變化之後所處於的行 與中間行的差距
offsets = np.array([0, 1, 2, -1, -2])
S2 = sparse.dia_matrix((data, offsets), shape=(5, 5))
print('now')
print(data, S2.toarray(), sep='\n')