我认为这将是稀疏矩阵的增量更新,而不是基于循环的条件,这将减慢速度.
通过类似A(i,j)= 1的方法向稀疏矩阵添加新条目时,通常需要重新打包整个矩阵数据结构.这是一项昂贵的操作.如果您感兴趣,MATLAB将在内部使用CCS数据结构(压缩列存储),这在数据结构部分here中有所描述.请注意语句:
This scheme is not effcient for manipulating matrices one element at a
time
通常,将矩阵中的非零条目作为一组三元组累积然后对稀疏进行单次调用要好得多(更快).例如(警告 – 脑编译代码!!):
% Inputs:
% N
% prev_array and next_array
% n_labels_prev and n_labels_next
% mapping
% allocate space for matrix entries as a set of "triplets"
ii = zeros(N,1);
jj = zeros(N,1);
xx = zeros(N,1);
nn = 0;
for next_label_ix = 1:n_labels_next
prev_label = mapping(next_label_ix);
if prev_label <= n_labels_prev
prev_global_label = prev_array(prev_label);
next_global_label = next_array(next_label_ix);
% reallocate triplets on demand