У меня очень длинный вектор 1xr v
, и очень длинный вектор w
1xs и матрица A
rxs, которая является редкой (но очень большой по размеру).Не улучшает ли Matlab следующее?
Я ожидал следующее быть оптимизированы Matlab, так что я не столкнуться с проблемами с памятью:
A./(v'*w)
но похоже, Matlab на самом деле пытается создать полный v'*w
матрицу, потому что я проблемы с памятью. Есть ли способ преодолеть это? Обратите внимание, что нет необходимости вычислять все v'*w
, потому что многие значения A
составляют 0
.
EDIT: Если бы это было возможно, один из способов сделать это будет делать A(find(A))./(v'*w)(find(A));
, но вы не можете выбрать подмножество матрицы (v'*w
в данном случае) без первого расчета его и положить его в Переменная.
Вы, вероятно, хотите использовать вместо [ 'spfun'] (http://www.mathworks.com/help/matlab/ref/spfun.html) -«Применить функцию к ненулевым разреженным матричным элементам» –
mmm ... spfun может быть хорошим руководством, но я не уверен, как его использовать в этом случае. во-первых, оцениваемая функция не знает индекса ячейки матрицы, на которую она применяется. – kloop