Я использую python для работы с матрицами большого размера (приблизительно 2000 x 2000), где каждая точка I
, J
в матрице представляет один пиксель.
Сами матрицыразреженный (т.е. значительная часть из них будет иметь нулевые значения), но когда они обновляются, они, как правило, представляют собой операции приращения к большому количеству смежных пикселей в прямоугольном «блоке», а не случайным пикселям здесь или там (свойствоя не использую в настоящее время в моих интересах ..).Боюсь немного нового в матричной арифметике, но я рассмотрел ряд возможных решений, включая различные варианты scipy
разреженных матриц.Пока что координатные (COO) матрицы кажутся наиболее перспективными.Так, например, когда я хочу увеличить форму одного блока, мне нужно будет сделать что-то вроде:
>>> from scipy import sparse
>>> from numpy import array
>>> I = array([0,0,0,0])
>>> J = array([0,1,2,3])
>>> V = array([1,1,1,1])
>>> incr_matrix = sparse.coo_matrix((V,(I,J)),shape=(100,100))
>>> main_matrix += incr_matrix #where main_matrix was previously defined
В будущем мне бы хотелось иметь более богатое представление значений пикселей в любом случае.(кортежи для представления RGB и т. д.), что-то, что numpy массив не поддерживает "из коробки" (или, возможно, мне нужно использовать this ).
В конечном итоге у меня будет ряд таких матриц, на которых мне нужно будет сделать простую арифмитику, и мне нужно, чтобы код был максимально эффективным - и распространяемым, поэтому мне нужнобыть в состоянии сохранять и обмениваться этими объектами в небольшом представлении без существенных штрафов.Мне интересно, если это правильный путь, или я должен смотреть сворачивая свои собственные структуры, используя dicts
и т.д.?