加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 具有可参数化“零”的稀疏矩阵类

发布时间:2020-12-16 03:00:42 所属栏目:百科 来源:网络整理
导读:我正在对日志域中的浮点稀疏矩阵进行一些计算,因此“空”条目实际上是-Inf(使用-FLT_MAX).我现在正在使用一个自定义的稀疏矩阵类,但我渴望在现成的替换中进行交换. 这是在C.我倾向于看Eigen和Boost uBlas中的压缩列矩阵.但是,不清楚是否支持“零”的自定义值
我正在对日志域中的浮点稀疏矩阵进行一些计算,因此“空”条目实际上是-Inf(使用-FLT_MAX).我现在正在使用一个自定义的稀疏矩阵类,但我渴望在现成的替换中进行交换.

这是在C.我倾向于看Eigen和Boost uBlas中的压缩列矩阵.但是,不清楚是否支持“零”的自定义值(可能由模板参数提供).有人有建议吗?

澄清:

我想要的是:对于以前没有“设置”的任何单元格(i,j),我希望mat [i,j]返回-Inf …所以这可能更好地描述为“默认”稀疏矩阵的“空”条目的值.

我正在使用它执行HMM递归(Viterbi,sum-product),其概率保留在日志域中以避免下溢.

我没有做任何矩阵操作…我只是填充动态编程表,基本上.我想使用一个稀疏的矩阵类,因为我只是填充一个矩阵,我想要高效的内存使用.压缩频带矩阵将提供良好的性能,因为我按顺序填充矩阵.

解决方法

这样的东西怎么样?
class compressed_matrix_nonzero_default : public boost::numeric::ublas::compressed_matrix<double>
{
    double def;
public:
    compressed_matrix_nonzero_default( int s1,int s2 )
        : boost::numeric::ublas::compressed_matrix<double>(s1,s2),def(0)
    {

    }
    void setDefault( double d ) { def = d; }
    double value( int i,int j )
    {
        typedef boost::numeric::ublas::compressed_matrix<double>::iterator1 it1_t;
        typedef boost::numeric::ublas::compressed_matrix<double>::iterator2 it2_t;
        for (it1_t it1 = begin1(); it1 != end1(); it1++)
        {
            if( it1.index1() <  i )
                continue;
            if( it1.index1() > i ) {
                return def;
            }
            for (it2_t it2 = it1.begin(); it2 != it1.end(); it2++)
            {
                if( it2.index2() < j )
                    continue;
                if( it2.index2() == j )
                    return *it2;
                if( it2.index2() > j )
                    return def;
            }


        }
        return def;
    }

};

用法

compressed_matrix_nonzero_default MNZ(3,3);
MNZ.setDefault(-100);
MNZ (1,1) = 45;

for( int i = 0; i < 3; i++ ) {
    for( int j = 0; j < 3; j++ ) {
        std::cout << MNZ.value(i,j) << ",";
    }
    std::cout << "n";
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读