返回信息流如题:
问题来自于基于对数域的LDPC译码算法的优化过程中,需要对一个矩阵H分别进行符号和模值的运算。
% 首先对H进行稀疏化
[ii,jj,nz_value] = find(H);
H = sparse(ii,jj,nz_value,m,n);
% 之后提取H的符号矩阵
Symbol = sign(H); %此时Symbol仍为稀疏形式,如果直接调用prod(Symbol,2),输出结果为全0列向量
% 将稀疏形式的Symbol转化为全矩阵形式
Full_Symbol = full(Symbol);
% 将Full_Symbol中的0元素替换为1
Full_Symbol(Full_Symbol==0)=1; %此时对Full_Symbol做连乘的结果与对Symbol按行求非零元素连乘的结果一致
% 按行对Full_Symbol进行连乘处理
Row_Mul = prod(Full_Symbol,2);
想请教大家,有没有更快速的处理稀疏矩阵连乘的方法,Full_Symbol(Full_Symbol==0)=1太耗时间了,希望大牛给予指导,谢谢。
这是一条镜像帖。来源:北邮人论坛 / matlab / #12341同步于 2017/5/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
【问题】求稀疏矩阵每行中的所有非零元素的乘积
romanral
2017/5/2镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
已自己解决,运行时间降低大约2个数量级,可参考如下:
%% 符号运算
% 提取H中所有非零元素的符号
% 转换为数-1的个数,奇数个-1则按行连乘结果为-1,偶数个-1则按行连乘结果为1
Symbol = sign(H);
[~,yy,nz] = find(Symbol');
minus_position = nz == -1;
yy = yy(minus_position);
Row_Mul = hist(yy,unique(yy));
Row_Mul = mod(Row_Mul,2)';
Row_Mul = -2*Row_Mul+1;