问题
查找与给定行匹配的矩阵行的最有效算法是什么?这与基于多个条件的表查找相同。
语境
有限元矩阵通常又大又稀疏,因此将整个矩阵存储在内存中是对计算机内存的低效使用。因此,我将矩阵生成为 3 元组,即(行索引、列索引、矩阵值)。由于底层网格的非结构化性质,可能需要多次递增相同的矩阵元素。
为此,必须搜索现有元素以查看 (row,column) 对是否已存在。如果是这样,则可以增加该值。如果不是,则为矩阵的新非零值创建一个新的 3 元组。
我的问题是:检查 (row,column) 对是否已经存在的有效方法是什么?如果是这样,数组的索引是什么?
这本质上与找到与给定行匹配的矩阵行相同。
目前,这在 MATLAB 中实现为
% rw is the array of row indices
% cl is the array of column indices
% rv is the row being searched for
% cv is the column being searched for
% i.e. searching for (rv,cv) in (rw,cl)
possible_row = find(rw == rv);
column = find(cl(possible_row) == cv);
% check that it was found first
if isempty(column)
% doesn't exist yet
element_index = -1; % flag that it needs to be created
else
element_index = possible_row(column);
end
% return element_index
由于 的性质find
,此过程比手动循环遍历数组要快得多。我可以编写一个 MEX 函数来执行此操作,但在此阶段我不希望这样做。
任何帮助将不胜感激。