在matlab中 稀疏矩阵赋值 提速,matlab – 加速巨大稀疏矩阵的条件填充

我认为这将是稀疏矩阵的增量更新,而不是基于循环的条件,这将减慢速度.

通过类似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

if (nn + 1 > length(ii))

ii = [ii; zeros(N,1)];

jj = [jj; zeros(N,1)];

xx = [xx; zeros(N,1)];

end

% append a new triplet and increment counter

ii(nn + 1) = next_global_label; % row index

jj(nn + 1) = prev_global_label; % col index

xx(nn + 1) = 1.0; % coefficient

nn = nn + 1;

end

end

% we may have over-alloacted our triplets, so trim the arrays

% based on our final counter

ii = ii(1:nn);

jj = jj(1:nn);

xx = xx(1:nn);

% just make a single call to "sparse" to pack the triplet data

% as a sparse matrix object

sp_graph_adj_global = sparse(ii,jj,xx,N,N);

我一次分配N个条目的块.假设您对矩阵的结构有很多了解,那么您可以在这里使用更好的值.

希望这可以帮助.

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值