Имам две разредени матрици A (логическа, 80274 x 80274) и B (неотрицателно цяло число, 21018 x 80274) и вектор c (положително цяло число, 21018 x 1).
Бих искал да намеря резултата res (логичен, 21018 x 80274) на
mat = B * A;
res = mat > sparse(diag(c - 1)) * spones(mat);
# Note that since c is positive, this is equivalent to
# res = bsxfun(@gt, mat, c-1)
# but octave's sparse bsxfun support is somewhat shoddy,
# so I'm doing this instead as a workaround
Проблемът е, че B * A има достатъчно ненулеви стойности (мисля, че 60824321, което не изглежда много, но по някакъв начин изчислението на spones(mat) използва повече от гигабайт памет преди октавни сривове), за да изчерпи цялата памет на моята машина въпреки че повечето от тях не надвишават c-1.
Има ли начин да направите това, без да изчислявате междинната матрица mat = B * A?
ПОЯСНЕНИЕ: Вероятно няма значение, но B и c всъщност са двойни матрици, които случайно съдържат само цели числа (и B е разреден).
spdiag
? Мога да намеря самоspdiags
в документа и все пак изглежда, че няма много смисъл да го прилагам към вектор? - person Luis Mendo   schedule 15.10.2013