如何在已排序向量中搜索插入點?Matlab在已排序向量中搜索插入點
換句話說,有什麼Matlab的等效Octave的 「查找」 功能:http://www.gnu.org/software/octave/doc/interpreter/Finding-Elements-and-Checking-Conditions.html#doc%2dlookup
進一步的說明:
這是我想做什麼:
res = bsxfun(@gt, A * B, c);
其中A B是大型稀疏矩陣,c是非負向列向量。
不幸的是,在與c進行比較之前,矩陣A * B有太多的非零元素來適應內存,所以我不能直接做這個乘法。
相反,我穿上每行中非零元素的數目的上界通過取
counts = spones(A) * sum(spones(B),2);
然後,我想將計數陣列分成n個部分,其總和大致相等。在八度,我會說:
cs = cumsum(counts)';
sectionSize = ceil(cs(end)/n);
places = lookup(cs, (0:n) * sectionSize);
bounds = [places(1:n) + 1; places(2:(n+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數組不應該以這種方式建立索引。
你可以舉一個Octave'lookup'函數的例子嗎? – chappjc