Укладка разреженных матриц

У меня есть существующий код с плотными массивами со следующей функциональностью, и я хотел бы также поддерживать разреженные матрицы.

В частности, у меня есть четырехмерный 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 по отдельности, но это кажется довольно громоздким и подверженным ошибкам.

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

Paul Panzer 09.03.2019 21:47

Есть разреженные vstack и hstack функции. В конечном итоге они используют bmat, который, в свою очередь, создает новую матрицу coo из coo атрибутов компонентов.

hpaulj 09.03.2019 21:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
40
0

Другие вопросы по теме