如何在matlab中迭代稀疏矩阵中的元素?

时间:2015-10-02 08:47:24

标签: matlab

我正在为matlab中的LDPC信念传播解码器编写代码。 我遵循以下指定的算法: http://www.ece.umd.edu/~tta/resources/LDPC.pdf第6页。

我想对这个目标使用稀疏矩阵。 在此期间我想迭代只有很少的矩阵。 我的问题是我如何只迭代矩阵中的那些?

我将更具体一点:假设我有以下matlab代码:

for row_index = 1 : row_num
    for coloum_index = 1 : col_num
        if parity_check_matrix(row_index, coloum_index)
            messages_llr_matrix(row_index, coloum_index) = ...
                code_word_aprior_prob(coloum_index);
        end
    end

此代码采用向量'code_word_aprior_prob'并将其值分配给矩阵'messages_llr_matrix'中不为零的行。现在,我想使用稀疏矩阵执行此操作。

parity_check_matrix是一个稀疏矩阵。

2 个答案:

答案 0 :(得分:7)

假设您有一个稀疏矩阵true || (1 === 1/3);。您可以使用

迭代其非零元素
S

虽然我不确定这会有多快。

在你的具体情况下,你可能会这样做

[ii,jj,ss] = find(S);

for k=length(ii)
   %// A nonzero element of S: ss(k) = S(ii(k),jj(k))
end

当然,您可以将[ii,jj] = find(parity_check_matrix); for k = 1 : length(ii) messages_llr_matrix(ii(k), jj(k)) = ... code_word_aprior_prob(jj(k)); end ii重命名为jjrow_index

答案 1 :(得分:0)

以下是您的代码段所做的事情,但并未完全迭代稀疏矩阵,就像问题标题所示。另外,我不确定我的其他答案中的方法是否比这更快或更慢。

请注意,我假设code_word_aprior_prob是行向量。然后做

messages_llr_matrix = bsxfun(@times, parity_check_matrix, code_word_aprior_prob)

可能就足够了。

请测试一下这是否真正给出了正确的答案,如果您真的想要速度,请测试哪种方式更快。<​​/ p>