Умножение разреженных матриц в MATLAB с помощью spfun

У меня есть плотная матрица столбцов y размера (m,1) и разреженная матрица x размера (m,n).
Я хочу выполнить поэлементное умножение, используя y и каждый столбец x.
Результирующая разреженная матрица все еще имеет размер (m,n) .
Разреженная матрица x при загрузке в память занимает около 10 ГБ.
Может ли spfun помочь мне достичь цели с эффективным использованием памяти?

Мне сложно понять логику этого.

Спасибо.


person Community    schedule 06.01.2016    source источник


Ответы (1)


Вы пробовали bsxfun?

out = bsxfun( @times, x, y ); 

spfun больше подходит для поэлементных операций, когда вы управляете каждым не- нулевой элемент x. Это не совсем подходит для операций с элементами матрица-вектор.
Однако, если вы хотите сделать что-то в этом направлении, вы можете попробовать:

[ii jj xij] = find(x); %// extract non-zeros of x and their locations
out = sparse( ii, jj, xij.*y(ii), size(x,1), size(x,2) );

См. doc find для получения дополнительной информации.

person Shai    schedule 06.01.2016
comment
Круто, я никогда не знал, что умножение нормальной матрицы на разреженную матрицу возможно и что это тоже приводит к разреженной матрице. - person Adriaan; 06.01.2016
comment
На самом деле я не знал, что bsxfun применим к разреженным матрицам ... - person ; 06.01.2016
comment
@ yi416 bsxfun круто !! - person Shai; 06.01.2016