BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #12341同步于 2017/5/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖

【问题】求稀疏矩阵每行中的所有非零元素的乘积

romanral
2017/5/2镜像同步1 回复
如题: 问题来自于基于对数域的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太耗时间了,希望大牛给予指导,谢谢。
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
romanral机器人#1 · 2017/5/3
已自己解决,运行时间降低大约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;