MATLAB получает доступ к нескольким элементам в разреженной матрице с использованием векторов индекса строки и столбца

Я чувствую, что должно быть простое решение, но я не могу его найти:

У меня есть разреженные матрицы A B той же размерности n*n. Я хочу создать матрицу C, которая копирует значения в A, где B не равно нулю.

Это мой подход:

[r,c,v] = find(B);

% now I'd like to create an array of values using indices r and c, 
% but this doesn't work (wrong syntax)
v2 = A(r,c);

% This won't work either
idx = find(B); % linear indexing, too high-dimensional
v2 = A(idx);

% and create C
C = sparse(r,c,v2,n,n);

Вот еще некоторые подробности:

  • Мои матрицы очень большие, поэтому решение должно быть эффективным. C(B~=0) = B(B~=0);, к сожалению, этого не сделает.
  • Линейное индексирование также не будет работать, поскольку матрицы слишком велики (Matrix is too large to return linear indices.).

Неужели нет возможности использовать двумерные индексы?

Спасибо за вашу помощь!


person Lisa    schedule 18.06.2013    source источник
comment
Не могли бы вы попробовать C = A .* (B~=0);?   -  person Da Kuang    schedule 18.06.2013
comment
Да, спасибо, это работает! Если вы хотите опубликовать его в качестве ответа, я могу формально его принять :)   -  person Lisa    schedule 18.06.2013
comment
Конечно. Я не был полностью уверен, прежде чем вы попробовали это на своих данных, потому что мы говорим об эффективности. Спасибо за кредит.   -  person Da Kuang    schedule 18.06.2013


Ответы (1)


Я думаю, C = A .* (B~=0); должно работать. При поэтапном умножении двух разреженных матриц будут доступны только ненулевые значения, поэтому это будет быстро.

person Da Kuang    schedule 18.06.2013