首页 > 其他分享 >模板矩阵类

模板矩阵类

时间:2024-07-17 13:19:44浏览次数:9  
标签:return column XMatrix 矩阵 vals const 模板 row

template <size_t row, size_t column, typename T = XDecimal>
class XMatrix {
public:
    XMatrix()
        : _row(row)
        , _column(column)
    {
        _vals = new T[row * column]{ 0.0 };
    }
    virtual ~XMatrix()
    {
        delete[] _vals;
    };

    bool isNull() const
    {
        return _vals == nullptr;
    };
    /** 获取行数 */
    size_t rowCount() const
    {
        return _row;
    }
    /** 获取列数 */
    size_t columnCount() const
    {
        return _column;
    }
    /** 获取元素值 */
    T value(size_t r, size_t c) const
    {
        return _vals[_column * r + c];
    }
    /** 设置元素值 */
    void setValue(size_t r, size_t c, T val)
    {
        _vals[_column * r + c] = val;
    }
    /** 矩阵转置 */
    virtual XMatrix& transpose()
    {
        auto* vals = new T[_column * _row];
        for(int r = 0; r < _row; ++r) {
            for(int c = 0; c < _column; ++c) {
                vals[c * _row + r] = _vals[r * _column + c];
            }
        }
        delete[] _vals;
        _vals   = vals;
        auto r  = _row;
        _row    = _column;
        _column = r;
        return *this;
    }
    /** 是否为方阵 */
    virtual bool isSquareMatrix() const
    {
        return _row == _column;
    }
    /** 是否为行矩阵 */
    virtual bool isRowMatrix() const
    {
        return _row == 1;
    }
    /** 是否为列矩阵 */
    virtual bool isColumnMatrix() const
    {
        return 1 == _column;
    }
    /** 是否为零矩阵 */
    virtual bool isZeroMatrix() const
    {
        for(int r = 0; r < _row; ++r) {
            for(int c = 0; c < _column; ++c) {
                if(!isZero(_vals[r * _column + c])) {
                    return false;
                }
            }
        }
        return true;
    }

    T*& operator[](size_t r)
    {
        T* mat[column];
        for(int i = 0; i < column; ++i) {
            mat[i] = &(_vals[_column * r + i]);
        }
        return *mat;
    }

    /** 重载运算符 XMatrix + otherXMatrix */
    XMatrix operator+(const XMatrix& m) const
    {
        XMatrix<row, column, T> mat;
        for(int r = 0; r < row; ++r) {
            for(int c = 0; c < column; ++c) {
                mat._vals[column * r + c] = this->_vals[column * r + c] + m._vals[column * r + c];
            }
        }
        return mat;
    }

    friend std::ostream& operator<<(std::ostream& outStream, const XMatrix& m)
    {
        if(m.isNull()) {
            outStream << "{}";
        } else {
            outStream << "{";
            for(int r = 0; r < m._row; ++r) {
                outStream << "[";
                for(int c = 0; c < m._column; ++c) {
                    char paddedNumber[25];
                    sprintf(paddedNumber, "%4.8f", m._vals[r * m._column + c]);
                    outStream << paddedNumber;
                    if(c < m._column) {
                        outStream << " ";
                    }
                }
                outStream << "] ";
            }
            outStream << "}";
        }

        return outStream;
    }

protected:
    /**
     * @brief 矩阵的数值(行主序)
     */
    T*     _vals{ nullptr };
    size_t _row{ 0 };
    size_t     _column{ 0 };
};

 

标签:return,column,XMatrix,矩阵,vals,const,模板,row
From: https://www.cnblogs.com/chanyuantiandao/p/18307101

相关文章

  • 带修莫队模板
    取分块大小\(n^\frac{2}{3}\)最优。例题:数颜色#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;constintN=1e6+5;intcnt[N],a[N];structquery{intl,r,t,id;//加入时间戳};structmodfiy{intpos,val;};intmain(......
  • 基于Go1.19的站点模板爬虫教程
    以下是基于Go1.19的站点模板爬虫教程。我们将使用Go编程语言创建一个简单的网页爬虫,爬取指定网站的内容。我们将使用一些常见的Go库,例如net/http和golang.org/x/net/html,来处理HTTP请求和解析HTML。第一步:安装和设置安装Go:如果你还没有安装Go,请先从Go官方......
  • 矩阵类
    头文件:classX_MATH_EXPORTXMatrix{public:XMatrix()=delete;XMatrix(size_trow,size_tcolumn,XDecimalval);XMatrix(size_trow,size_tcolumn,constXDecimalvals[]);XMatrix(size_trow,size_tcolumn,std::in......
  • 易优CMS模板标签tags标签调用
    【基础用法】标签:tags描述:TAG调用用法:{eyou:tagssort='now'getall='0'loop='100'}<ahref='{$field.link}'>{$field.tag}</a>(文档数:{$field.total}){/eyou:tags}属性:aid=''文档ID,在内容页可以不设置该属性typeid=''栏......
  • 莫队模板
    #include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;constintN=1e6+5;intcnt[N],a[N];structquery{intl,r,id;};intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;cin>>n;......
  • vue基础day01(MVVM、绑定、事件、结构模板)
    vue基础一、什么是vue构建用户界面的渐进式框架,采用自底向上逐层应用开发核心理念:数据驱动视图,组件化开发二、框架和库的区别框架:一套完整的解决方案,对项目的侵入性较大,项目如果需要更换框架,需要重新架构整个项目库:提供了一个小的功能,对项目的侵入性较小,如果某个库无......
  • Asp .Net Core 系列:基于 T4 模板生成代码
    目录简介组成部分分类VisualStudio中使用T4模板创建T4模板文件2.编写T4模板3.转换模板中心控制Manager根据MySQL数据生成实体简介T4模板,即TextTemplateTransformationToolkit,是微软官方在VisualStudio中引入的一种代码生成引擎。自VisualStudio2008开始,T4模板就被......
  • 【模板】插头 DP
    为了利用位运算的良好性质,采用四进制状态压缩代替三进制通过哈希表压缩有限的状态与普通的按行滚动的滚动数组不同,插头DP中的滚动数组是按格滚动的因为布尔数组值默认为false,所以我们可以用“true”代表“可通行”转移时需要找到与之匹配的括号——实现算法时不能够总是代入......
  • 关于静态文件目录与模板引用和Nginx location块的适配设置
    项目配置文件内关于静态文件的设置项#静态文件的URL前缀STATIC_URL='/static/'#项目根目录的静态文件目录STATICFILES_DIRS=[os.path.join(BASE_DIR,'static'),os.path.join(BASE_DIR,'parallel/static'),os.path.join(BASE_DIR,'blog/static&#......
  • 机器学习分类结果精度测定 - 混淆矩阵(Confusion Matrix)
    一、引言机器学习和数据科学中一个经常被忽视,但至关重要的概念是模型评估。你可能已经建立了一个非常先进的模型,但如果没有合适的评估机制,你就无法了解模型的效能和局限性。这就是混淆矩阵(ConfusionMatrix)派上用场的地方。1.1什么是混淆矩阵?混淆矩阵是一种特定的表格布局......