Я хочу, чтобы разделить разреженные матрицы Scipy на части, и они вернули их вместе.Разделите разреженные матрицы и положите их обратно
Например, начиная с разреженным массивом:
# 0 1 0
# 3 0 5
# 0 7 0
разделить его на 6 разреженных массивов:
# 0 1 0
# 3 0 5
#
# 0 7 0
Другими словами, я хочу функции split_sparse и merge_sparse такие, что после испытания проходит:
# Humpty Dumpy sat on a wall
mat = np.arange(9)
mat[::2] = 0
mat=mat.reshape(3, 3)
mat=csr_matrix(mat)
# Humpy dumpty had a great fall
row_divs = [2]
col_divs = [1, 2]
split_mat = split_sparse(mat, row_divs, col_divs)
sparse_eq = lambda x, y: (x-y).nnz == 0
# All the kings horses and all the kings men
assert sparse_eq(split_mat[0, 0], csr_matrix([[0], [3]]))
assert sparse_eq(split_mat[0, 1], csr_matrix([[1], [0]]))
assert sparse_eq(split_mat[0, 2], csr_matrix([[0], [5]]))
assert sparse_eq(split_mat[1, 0], csr_matrix([[0]]))
assert sparse_eq(split_mat[1, 1], csr_matrix([[7]]))
assert sparse_eq(split_mat[1, 2], csr_matrix([[0]]))
# Pooled their efforts and put Humpy together again.
assert sparse_eq(merge_sparse(split_mat), mat)
С соответствующими 'hstack' и' vstack' похоже, что это будет работать и с плотными массивами. Он использует тот факт, что некоторые разреженные форматы реализуют срез и индексирование почти так же, как и плотные массивы ('mat [rs: re, cs: ce]'). – hpaulj