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
функция