У меня есть две разреженные матрицы A (логические, 80274 x 80274) и B (неотрицательное целое, 21018 x 80274) и вектор c (положительное целое, 21018 x 1).
Я хотел бы найти разрешение результата (логическое, 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) использует более гигабайта памяти до сбоя октавы), чтобы исчерпать всю память моей машины хотя большинство из них не превышает с-1.
Есть ли способ сделать это без вычисления промежуточной матрицы mat = B * A ?
ПОЯСНЕНИЕ: Это, вероятно, не имеет значения, но B и c на самом деле являются двойными матрицами, которые содержат только целые значения (и B является разреженным).
spdiag
? Я могу найти толькоspdiags
в документе, и все равно не имеет особого смысла применять его к вектору? - person Luis Mendo   schedule 15.10.2013