У меня был следующий вопрос, который похож: Doesn't Matlab optimize the following?Как сделать следующий расчет в Matlab?
, но это один сложнее вариант, и решение, предложенное там не работает.
У меня очень длинная матрица n x r V и очень длинная матрица W n x s и матрица A rxs, которая является разреженной (но очень большой по размеру).
Я ожидал следующее быть оптимизированы Matlab, так что я не столкнуться с проблемами с памятью:
A./(V'*W)
но похоже, Matlab на самом деле пытается для генерации полной матрицы V '* W, потому что я столкнулся с проблемой нехватки памяти. Есть ли способ преодолеть это? Заметим, что нет необходимости вычислять все V '* W, потому что многие значения A равны 0.
Если бы это было возможно, то одним из способов сделать это было бы сделать A (find (A)) ./ (V «* W) (найти (A));
, но вы не можете выбрать подмножество матрицы (V '* W в этом случае), не вычисляя сначала его и не помещая в переменную.
(Основное отличие от предыдущего вопроса:. V и W являются не только векторы, но матрицы)
Быстрое предложение/тест: Можете ли вы также создавать разреженные матрицы V и W? – David
'V '* W' является r x r. 'A' - это r x s. Вы не можете определить 'A ./ (V + * W)'. Вам нужно изменить некоторые размеры. Может быть, 'W' является n x s? –