交换行 csr_matrix scipy
Swap rows csr_matrix scipy
我在 scipy 中有一个 256x256 csr_matrix 并且我有一个我想要应用的新行顺序的列表。我试过这个:
def HblockDiag(z):
Hz = H(z) # H(z) returns a 256x256 csr_matrix
Hz.indices = idenRows
return Hz
但它不起作用,因为 indices
没有给出每一行的索引...最好的方法是什么?
编辑:
def HblockDiag(H, idenRows):
x = H.tocoo()
idenRows = np.asarray(idenRows, dtype=x.row.dtype)
x.row = idenRows[x.row]
H = x.tocsr()
return H
test = sps.csr_matrix([[1,2,4],[6,3,4],[8,5,2]])
print test.toarray()
test = HblockDiag(test, [2,0,1])
print test.toarray()
我得到:
[[1 2 4]
[6 3 4]
[8 5 2]]
[[6 3 4]
[8 5 2]
[1 2 4]]
相反,我想得到:
[[8 5 2]
[1 2 4]
[6 3 4]]
从 CSR 格式转换为 COO 格式。
x = Hz.tocoo()
根据文档字符串,sparse.coo_matrix.__doc__
,COO 有 "very fast conversion to and from CSR/CSC formats"。
排列 COO 矩阵的行
idenRows = np.argsort(idenRows)
x.row = idenRows[x.row]
从 COO 转回 CSR
Hz = x.tocsr()
例如,
import numpy as np
import scipy.sparse as sps
def HblockDiag(H, idenRows):
x = H.tocoo()
idenRows = np.argsort(idenRows)
idenRows = np.asarray(idenRows, dtype=x.row.dtype)
x.row = idenRows[x.row]
H = x.tocsr()
return H
test = sps.csr_matrix([[1,2,4],[6,3,4],[8,5,2]])
print test.toarray()
# [[1 2 4]
# [6 3 4]
# [8 5 2]]
test = HblockDiag(test, [2,0,1])
print test.toarray()
产量
[[8 5 2]
[1 2 4]
[6 3 4]]
PS。通常,稀疏矩阵仅在矩阵的大小非常大时才使用。如果形状仅为 (256, 256),则不清楚为什么要使用稀疏矩阵。此外,矩阵应包含 at least 80% zeros for sparse matrices to pay off.
我在 scipy 中有一个 256x256 csr_matrix 并且我有一个我想要应用的新行顺序的列表。我试过这个:
def HblockDiag(z):
Hz = H(z) # H(z) returns a 256x256 csr_matrix
Hz.indices = idenRows
return Hz
但它不起作用,因为 indices
没有给出每一行的索引...最好的方法是什么?
编辑:
def HblockDiag(H, idenRows):
x = H.tocoo()
idenRows = np.asarray(idenRows, dtype=x.row.dtype)
x.row = idenRows[x.row]
H = x.tocsr()
return H
test = sps.csr_matrix([[1,2,4],[6,3,4],[8,5,2]])
print test.toarray()
test = HblockDiag(test, [2,0,1])
print test.toarray()
我得到:
[[1 2 4]
[6 3 4]
[8 5 2]]
[[6 3 4]
[8 5 2]
[1 2 4]]
相反,我想得到:
[[8 5 2]
[1 2 4]
[6 3 4]]
从 CSR 格式转换为 COO 格式。
x = Hz.tocoo()
根据文档字符串,
sparse.coo_matrix.__doc__
,COO 有 "very fast conversion to and from CSR/CSC formats"。排列 COO 矩阵的行
idenRows = np.argsort(idenRows) x.row = idenRows[x.row]
从 COO 转回 CSR
Hz = x.tocsr()
例如,
import numpy as np
import scipy.sparse as sps
def HblockDiag(H, idenRows):
x = H.tocoo()
idenRows = np.argsort(idenRows)
idenRows = np.asarray(idenRows, dtype=x.row.dtype)
x.row = idenRows[x.row]
H = x.tocsr()
return H
test = sps.csr_matrix([[1,2,4],[6,3,4],[8,5,2]])
print test.toarray()
# [[1 2 4]
# [6 3 4]
# [8 5 2]]
test = HblockDiag(test, [2,0,1])
print test.toarray()
产量
[[8 5 2]
[1 2 4]
[6 3 4]]
PS。通常,稀疏矩阵仅在矩阵的大小非常大时才使用。如果形状仅为 (256, 256),则不清楚为什么要使用稀疏矩阵。此外,矩阵应包含 at least 80% zeros for sparse matrices to pay off.