ソートされたベクター内の挿入ポイントを検索するにはどうすればよいですか?
言い換えれば、Octave の「ルックアップ」関数に相当する Matlab は次のとおりです。
さらなる説明:
これが私がやりたいことです:
res = bsxfun(@gt, A * B, c);
ここで、A と B は大きなスパース行列で、c は非負の列ベクトルです。
残念ながら、c と比較する前に、行列 A * B には非ゼロ要素が多すぎてメモリに収まらないため、この乗算を直接行うことはできません。
代わりに、各行の非ゼロ要素の数に上限を設定します。
counts = spones(A) * sum(spones(B),2);
次に、counts 配列を合計がほぼ等しい n 個の部分に分割します。Octave では、次のように言います。
cs = cumsum(counts)';
sectionSize = ceil(cs(end) / n);
places = lookup(cs, (0:n) * sectionSize);
bounds = [places(1:n) + 1; places(2:(n+1))];
これで、マシンのすべてのメモリを使い果たすことなく、res を 1 つずつ構築できます。
res = sparse(size(A,1),size(B,2));
for b = bounds
res(b(1):b(2),:) = bsxfun(@gt,A(b(1):b(2),:) * B,c(b(1):b(2)));
end
これを行う方法についてのより良いアイデアを歓迎します。特に、Matlab は、この方法でインデックスを作成して res 配列を構築すべきではないと警告しているためです。