matlab: заполнение разреженной матрицы с добавлением

Предисловие: Как утверждают руководящие принципы Matlab, Обычно, когда кто-то хочет эффективно заполнить разреженную матрицу в Matlab, он должен создать вектор индексов в матрице и вектор значений, которые он хочет присвоить, а затем сконцентрировать все назначения в одно атомарная операция, чтобы позволить matlab заранее "подготовить" матрицу и оптимизировать скорость назначения. Простой пример:

A=sparse([]);
inds=some_index_generating_method();
vals=some_value_generating_method();
A(inds)=vals;

Мой вопрос: что я могу сделать в том случае, если inds содержат перекрывающиеся индексы, т.е. inds=[4 17 8 17 9] где 17 повторяется дважды. В этом случае я хотел бы, чтобы матрице было присвоено сложение всех значений, сопоставленных с одним и тем же индексом, то есть для предыдущего примера.

A(17)=vals(2)+vals(4) %as inds(2)==inds(4)

Есть ли прямой и, главное, быстрый способ добиться этого? У меня нет способа генерировать индексы и значения "умнее".

1 ответ

Решение

Это может помочь:

S = sparse(i,j,s,m,n,nzmax) использует векторы i, j и s для генерации m -от- n разреженная матрица такая, что S(i(k),j(k)) = s(k) с выделенным пространством для nzmax ненулевой. векторы i, j, а также s все одинаковой длины. Любые элементы s нулевые игнорируются вместе с соответствующими значениями i а также j, Любые элементы s которые имеют повторяющиеся значения i а также j складываются вместе.

Смотрите больше в документации MATLAB для sparse функция

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