我有两个稀疏矩阵 A(逻辑,80274 x 80274)和 B(非负整数,21018 x 80274)和一个向量 c(正整数,21018 x 1)。
我想找到结果 res (logical, 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 看起来并不多,但不知何故,在 octave 崩溃之前,spones(mat) 的计算会占用超过 1 GB 的内存)以耗尽我所有机器的内存即使其中大多数不超过c-1。
有没有办法在不计算中间矩阵 mat = B * A 的情况下做到这一点?
澄清:这可能无关紧要,但 B 和 c 实际上是双矩阵,碰巧只保存整数值(并且 B 是稀疏的)。