У меня есть существующий код с плотными массивами со следующей функциональностью, и я хотел бы также поддерживать разреженные матрицы.
В частности, у меня есть четырехмерный tensor с формой (k, k, n, n), которую я частично сплющиваю в matrix формы (k * n, k * n) вот так.
# Roll the third dimension to the second position to get a tensor
# with shape (k, n, k, n)
rolled = np.rollaxis(tensor, 2, 1)
# Extract the dimensions
k, n = rolled.shape[:2]
# Reshape to partially flatten the array
matrix = rolled.reshape((k * n, k * n))
В разреженной настройке у меня есть список списков k на k, где каждый элемент представляет собой разреженную матрицу n на n. Использование np.rollaxis не вариант, потому что некоторые измерения разрежены, а некоторые плотны. Любые идеи о том, как добиться такого же поведения, чтобы я получил разреженную матрицу с формой (k * n, k * n)?
Одним из вариантов может быть использование формат координат и установка каждого элемента matrix по отдельности, но это кажется довольно громоздким и подверженным ошибкам.
Есть разреженные vstack и hstack функции. В конечном итоге они используют bmat, который, в свою очередь, создает новую матрицу coo из coo атрибутов компонентов.






Разве
scipy.sparse.bmatне то, что вам нужно?