Я чувствую, что должно быть простое решение, но я не могу его найти:
У меня есть разреженные матрицы 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.
).
Неужели нет возможности использовать двумерные индексы?
Спасибо за вашу помощь!
C = A .* (B~=0);
? - person Da Kuang   schedule 18.06.2013