基于C#编程建立泛型Matrix数据类型及对应处理方法

这篇具有很好参考价值的文章主要介绍了基于C#编程建立泛型Matrix数据类型及对应处理方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

        上一篇文档中描述了如何写一个Vector<T>类,本次在上一篇文档基础上,撰写本文,介绍如何书写一个泛型Matrix,可以应用于int、double、float等C#数值型的matrix。

        本文所描述的Matrix<T>是一个泛型,具有不同数值类型Matrix矩阵构造、新增、删除、查询、更改、深度复制、显示元素值、vector运算、扩展等功能。整体代码如下所示。

        另外,在编写Matrix<T>类时,为了调用Vector<T>类,对原先的Vector类代码,进行补充和修改。点击下载Matrix泛型dll库及介绍!

基于C#编程建立泛型Matrix数据类型及对应处理方法

        注:Matrix表示矩阵类,matrix表示矩阵。

        注:出于项目尚未结题考虑,本次代码就不公开,但会提供一个免费xmu.dll库以及dll调用的方法,里面也包含了Vector库(Vector调用方式可以参考上一篇博客)。而本博客仅仅介绍Matrix<T>的调用方法。待项目结束以后,博客在补充!

二、基本框架

2.1 建立Matrix<T>类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace XMU//.Base
{
    public class Matrix<T> where T : struct
{

     }
}

        注:<T> where T : struct中,T表示泛型,是一个占位符,可以表示C#任何数据类型,包括自定义的类型,where T : struct 表示泛型的约束,约束泛型的类型为struct,及数值型。

2.2 Matrix成员

        // 成员,存放数据
        public T[,] _data;

2.3 Matrix属性

        Matrix只包含Row、Col、DataType(private)属性,分别表示矩阵的行数、列数、数据类型(int、double……)、数据类型的大小(eg:int型,对应sizeof(int))。

2.4 Matrix方法

        本博客撰写的Matrix类方法主要分为两种,一种是向量Matrix<T>的构造;一种是Matrix元素之间的操作,包括运算符(+、-、*、/、>、>=、<、<=、==、!=)重载、行/列提取、查询、扩展、求和、求最大值、求最小值、求均值、查找。

2.4.1 构造函数

        本文所写的Matrix构造函数有四种类型:构造空的matrix、根据指定维度构造全0或全1 matrix、根据数组构造matrix以及根据Vector构造matrix。

        为了便于显示Matrix元素,验证代码正确性,建议优先重写Tostring方法。

2.4.2 this[,]

        this[,] 可以根据中括号内的索引值,查询对应位置的元素。

2.4.3 Copy

        Copye方法可以在Matrix新增一个同类型的数或另一个Matrix,具体代码如下,运算符重载的基础,因此先介绍:

2.5 Matrix 运算符重载

2.5.1 +正号

        "+"正号运算符重载,返回一个全新的matrix矩阵,即每个元素乘一个+1。

函数原型:

public static Matrix<T> operator +(Matrix<T> m1)

函数说明:用来重载正号运算符

名称

说明

m1

用来进行正号运算的matrix

2.5.2 -负号

        "-"正号运算符重载,返回一个全新的matrix矩阵,即每个元素乘一个-1。

函数原型:

public static Matrix<T> operator -(Matrix<T> m1)

函数说明:用来重载负号运算符

名称

说明

m1

用来进行负号运算的matrix

2.5.3 +加法

        用于两个矩阵相加,有三种情况:矩阵+常数、常数+矩阵、矩阵+矩阵。

函数原型:

public static Matrix<T> operator +(Matrix<T> m1, Matrix<T> m2)

public static Matrix<T> operator +(Matrix<T> m1, T value)

public static Matrix<T> operator +(T value, Matrix<T> m1)

函数说明:用来重载加法运算符

名称

说明

m1

加法左边的matrix

m2

加法右边的vector

value

用来与matrix相加的数

2.5.4 -减法

        同加法一样,用于两个矩阵相减,有三种形式:矩阵-常数、常数-矩阵、矩阵-矩阵,代码如下:

函数原型:

public static Matrix<T> operator -(Matrix<T> m1, Matrix<T> m2)

public static Matrix<T> operator -(Matrix<T> m1, T value)

public static Matrix<T> operator -(T value, Matrix<T> m1)

函数说明:用来重载减法运算符

名称

说明

v1

减法左边的matrix

v2

减法右边的matrix

value

用来与matrix相减的数

2.5.4 乘法

        同加减法一样,用于矩阵相乘,有三种情况:矩阵*常数、常数*矩阵、矩阵*矩阵。(注:矩阵点乘在后面讲解)。

函数原型:

public static Matrix<T> operator *(Matrix<T> m1, Matrix<T> m2)

public static Matrix<T> operator *(Matrix<T> m1, T value)

public static Matrix<T> operator *(T value, Matrix<T> m1)

函数说明:用来重载乘法运算符

名称

说明

v1

乘法左边的matrix

v2

乘法右边的matrix

value

用来与matrix相乘的数

2.5.5 大于>

        大于>运算符用于比较常数与矩阵的比较,有三种情况:常数>矩阵、矩阵>常数、矩阵>矩阵。

        注:矩阵“>”必须与小于号“<”成对出现(重载)。

函数原型:

public static bool[,] operator >(Matrix<T> m1, T Value)

public static bool[,] operator >( T Value, Matrix<T> m1)

public static bool[,] operator >(Matrix<T> m1, Matrix<T> m2)

函数说明:用来比较矩阵与矩阵/数的大小

名称

说明

m1

matrix1

m2

matrix2

value

用来与matrix相比的数

2.5.6 小于<

        同大于号一样情况。

函数原型:

public static bool[,] operator <(Matrix<T> m1, T Value)

public static bool[,] operator <( T Value, Matrix<T> m1)

public static bool[,] operator <(Matrix<T> m1, Matrix<T> m2)

函数说明:用来比较矩阵与矩阵/数的大小

名称

说明

m1

matrix1

m2

matrix2

value

用来与matrix相比的数

2.5.7 大于等于

函数原型:

public static bool[,] operator >=(Matrix<T> m1, T Value)

public static bool[,] operator >=( T Value, Matrix<T> m1)

public static bool[,] operator >=(Matrix<T> m1, Matrix<T> m2)

函数说明:用来比较矩阵与矩阵/数的大小

名称

说明

m1

matrix1

m2

matrix2

value

用来与matrix相比的数

2.5.8小于等于

public static bool[,] operator <=(Matrix<T> m1, T Value)

public static bool[,] operator <=( T Value, Matrix<T> m1)

public static bool[,] operator <=(Matrix<T> m1, Matrix<T> m2)

函数说明:用来比较矩阵与矩阵/数的大小

名称

说明

m1

matrix1

m2

matrix2

value

用来与matrix相比的数

2.5.9 等于

函数原型:

public static bool[,] operator ==(Matrix<T> m1, T Value)

public static bool[,] operator ==( T Value, Matrix<T> m1)

public static bool[,] operator ==(Matrix<T> m1, Matrix<T> m2)

函数说明:用来比较矩阵与矩阵/数的大小

名称

说明

m1

matrix1

m2

matrix2

value

用来与matrix相比的数

2.5.10不等于

3.1.11 != 不等于

函数原型:

public static bool[,] operator !=(Matrix<T> m1, T Value)

public static bool[,] operator !=( T Value, Matrix<T> m1)

public static bool[,] operator !=(Matrix<T> m1, Matrix<T> m2)

函数说明:用来比较矩阵与矩阵/数的大小

名称

说明

m1

matrix1

m2

matrix2

value

用来与matrix相比的数

2.6 其它公共方法

2.6.1 GetRow

        获取矩阵某一行。

函数原型:

public Vector<T> GetRow(int rowIndex)

函数说明:该方法是用来在获取矩阵rowIndex对应的行。

名称

说明

rowIndex

用来提取的行索引

2.6.2 GetCol

        获取矩阵某一列。

函数原型:

public Vector<T> GetCol(int colIndex)

属性说明:该方法是用来在获取矩阵rowIndex对应的列。

名称

说明

rowIndex

用来提取的列索引

2.6.3 SetRow

        更改矩阵某一行数据。

函数原型:

public void SetRow(Vector<T> v, int rowIndex = 0)

函数说明:表示需要将v替换矩阵中rowIndex多对应的行。

名称

说明

v

需要替换的向量

rowIndex

表示需要替换的行,默认为0

2.6.4 SetCol

        更改矩阵某一列数据。

函数原型:

public void SetCol(Vector<T> v, int colIndex = 0)

函数说明:表示需要将v替换矩阵中rowIndex多对应的列。。

名称

说明

v

需要替换的向量

colIndex

表示需要替换的列,默认为0

2.6.5 Transposition

        将矩阵进行转置处理。

函数原型:

public Matrix<T> Transposition()

函数说明:表示矩阵的转置

2.5.6 ExtractRow

        根据多个int[]数组索引,提取矩阵对应的行。

函数原型:

public Matrix<T> ExtractRow(int[] indexs)

函数说明:根据int索引数组,提取矩阵的对应的所有行数。

名称

说明

indexs

int索引数组

2.5.7 ExtractCol

        根据多个int[]数组索引,提取矩阵对应的列。

函数原型:

public Matrix<T> ExtractCol(int[] indexs)

函数说明:根据int索引数组,提取矩阵的对应的所有列数。

名称

说明

indexs

int索引数组

2.5.8 DelRow

        根据int数、多个int[]数组索引,删除矩阵对应的行。

函数原型:

public Matrix<T> DelRow(params int[] indexs)

public Matrix<T> DelRow(int index)

函数说明:根据索引(数组),删除对应的行,得到一个新的矩阵。

名称

说明

indexs

需要删除的行索引数组

index

需要删除的行索引

2.5.9 DelCol

        根据int、多个int[]数组索引,删除矩阵对应的列。

函数原型:

public Matrix<T> DelCol(params int[] indexs)

ublic Matrix<T> DelRow(int index)

函数说明:根据索引(数组),删除对应的列,得到一个新的矩阵。

名称

说明

indexs

需要删除的列索引数组

index

需要删除的列索引

2.5.10 Unint

        与另一个矩阵进行行/列方向组合,默认行组合,默认rowUnion = true,表示行组合,反之,则表示列组合。

函数原型:

public Matrix<T> Unint(Matrix<T> m1, bool rowUnion = true)

函数说明:与另一个矩阵进行行/列方向组合,默认行组合

名称

说明

m1

需要组合的另一个矩阵

rowUnion

表示是否为行组合,默认为true;false表示列向组合

2.5.11 Repmat

        矩阵的行/列成倍数扩展,都默认为1倍,rowCopyX 表示行的倍数,colCopyX表示列的倍数。

函数原型:

public Matrix<T> Repmat(int rowCopyX = 1, int colCopyX = 1

函数说明:将矩阵按照行、列进行成倍数扩展

名称

说明

rowCopyX

行扩展的倍数,默认为1

colCopyX

列扩展的倍数,默认为1

2.5.12 Max

        求矩阵全域(maxType = 0)、每行(maxType = 1)、每列(maxType = 2)的最大值。

函数原型:

public Vector<T> Max(int maxType = 0)

函数说明:求全域最大值时,maxType=0(默认);求每行最大值时,maxType=1;求每列最大值时,maxType=2

名称

说明

maxType

求解最大值的类型,maxType = 0(默认)/1/2,分别表示全域、行、列方向最大值

2.5.13 Min

        求矩阵全域(minType = 0)、每行(minType = 1)、每列(minType = 2)的最小值。

函数原型:

public Vector<T> Min(int minType = 0)

函数说明:求全域最小值时,minType=0(默认);求每行最小值时,minType=1;求每列最小值时,minType=2

名称

说明

minType

求解最小值的类型,minType = 0(默认)/1/2,分别表示全域、行、列方向最小值

2.5.14 Sum

        求矩阵全域(sumType = 0)、每行(sumType = 1)、每列(sumType = 2)的和。

函数原型:

public Vector<T> Sum(int sumType = 0)

函数说明:求全域总和时,sumType=0(默认);求每行总和时,sumType=1;求每列总和时,sumType=2

名称

说明

sumType

求解总和的类型,sumType = 0(默认)/1/2,分别表示全域、行、列方向总和

2.5.15 Mean

        求矩阵全域(meanType = 0)、每行(meanType = 1)、每列(meanType = 2)的均值。

函数原型:

public Vector<T> Mean(int meanType = 0)

函数说明:求全域均值时,meanType=0(默认);求每行均值时,minType=1;求每列均值时,minType=2

名称

说明

meanType

求解均值的类型,meanType = 0(默认)/1/2,分别表示全域、行、列方向均值

 2.5.16 FindNumber

        求全域等于value的个数,meanType=0(默认);求每行等于value的个数,meanType=1;求每列等于value的个数,meanType=2。

函数原型:

public int[] FindNumber(T value, int findNumType = 0)

函数说明:根据findNumType的值,查找全域(findNumType=0)、每行(findNumType=1)或每列(findNumType=2)元素等于value的元素个数。

名称

说明

value

所需要查找的值

findNumType

寻找元素的方式,findNumType = 0(默认)/1/2,分别表示全域、行、列方向寻找

2.5.17 Find

        出所有元素等于value值的位置索引。

函数原型:

public int[,] Find(T value)

函数说明:查找全域元素等于value位置索引

名称

说明

value

需要查找的值

2.5.18 Data

        Data方法可以用来提取Matrix矩阵元素,或则说是量T 类型的Matrix转化T类型的数组。

函数原型:

public T[,] Data()

函数说明:将matrix元素提取出来,保存在T[,]数组上

三、验证

        调用的时候,将dll应用到工程文件的项目中,并添加:using XMU;

        可先下载dll库,里面包含了一个验证的program.cs文件。验证结果部分截图如下:

基于C#编程建立泛型Matrix数据类型及对应处理方法

        代码暂不公开,需要的课下载封装的dll库,直接调用,若有不对或不足之处,敬请斧正。我将及时更新xmu.dll库。 

路漫漫其修远兮,吾将上下而求索!文章来源地址https://www.toymoban.com/news/detail-433338.html

到了这里,关于基于C#编程建立泛型Matrix数据类型及对应处理方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#泛型进阶:深入解析类型参数约束,优化代码安全性与灵活性

    概述: C#泛型类型参数约束提供了灵活的方式,确保泛型代码满足特定条件。从值类型、引用类型、构造函数到基类、接口等多重约束,为泛型设计提供了更多限制和设计选择。可空参数约束进一步增强了泛型的适用性。这些约束提高了代码的类型安全性和可读性,为开发者

    2024年02月03日
    浏览(73)
  • 【C++】泛型编程 ① ( 函数模板 | 函数模板概念 | 函数模板意义 | 函数模板定义语法 | 函数模板调用语法 | 显式类型调用 | 自动类型推导 )

    在 C++ 语言中 , 泛型编程 的 核心就是 函数模板 和 类模板 ; 函数模板 Function Template 是 C++ 语言 中的 重要特性 ; 函数模板概念 : 建立一个 \\\" 通用函数 \\\" , 不指定该函数的 函数返回值类型 和 函数参数类型 , 仅使用 \\\" 虚拟类型 \\\" 代表 上述 两种类型 , 该 \\\" 通用函数 \\\" 就是 \\\" 函数模

    2024年02月19日
    浏览(26)
  • 01 java 学习 数据类型、基础语法、封装、继承、多态、接口、泛型、异常等

    目录 环境搭建和基础知识  什么是JRE: 什么是JDK: 基础数据类型  分支选择if else switch和c一毛一样 for和while循环还有数组基本和c一样 封装 函数调用、传参、命名规范、数组新命名规范 java输入Scanner scanner = new Scanner(System.in); 类的创建和使用以及封装修饰符  构造方法:含义、

    2024年02月11日
    浏览(29)
  • oracle中的数据类型和java中的数据类型的对应关系

    oracle中的的date 对应java中的 java.util.date java.sql.date 是都可以的 但通常使用java.util.date 因为它的作用范围大于java.sql.date

    2024年02月09日
    浏览(32)
  • AI教我学编程之C#类型

    在上一节 中,我们通过C#入门程序了解了关于C#的基础知识。接下来,让我们深入研究C#类型系统,这是编程中的基石,用于定义数据的性质和操作。从基本数据类型到自定义类型,对类型系统的理解将使初学者更加熟悉C#代码的编写和运作方式。 重点先知 对话AI 类型是一种

    2024年01月16日
    浏览(24)
  • C#学习笔记--数据结构、泛型、委托事件等进阶知识点

    ArrayList 元素类型以Object类型存储,支持增删查改的数组容器。 因而存在装箱拆箱操作,谨慎使用。 ArrayList和数组区别? ArrayList使用不用说明固定长度,数组则需要 数组存储的是指定类型的,ArrayList是Object ArrayList存在装箱拆箱,数组不存在 ArrayList数组长度用Count获取 而数组

    2024年02月08日
    浏览(32)
  • C++ 用户输入与数据类型详解:建立基本计算器及变量类型

    你已经学习了 cout 用于输出(打印)值。现在我们将使用 cin 来获取用户输入。 cin 是一个预定义变量,它使用提取运算符( )从键盘读取数据。 在下面的示例中,用户可以输入一个数字,该数字存储在变量 x 中。然后我们打印 x 的值: 示例 需要注意的是: cout 的发音是

    2024年03月26日
    浏览(30)
  • Redis的数据类型及对应的数据结构(二)

    接上篇:Redis的数据类型及对应的数据结构(一)_鱼跃鹰飞的博客-CSDN博客 本篇主要讨论剩下的几种数据结构的应用场景 应用场景 集合的主要几个特性,无序、不可重复、支持并交差等操作。 因此 Set 类型比较适合用来数据去重和保障数据的唯一性,还可以用来统计多个集

    2024年02月10日
    浏览(69)
  • 探索泛型与数据结构:解锁高效编程之道

    在当今信息爆炸的时代,数据结构和算法成为了程序员必备的核心技能。而泛型作为Java语言中的一项强大特性,为数据结构和算法的实现提供了更高效、更安全的方式。本文将深入探讨泛型的概念、使用场景以及结合数据结构的应用,为您打开高效编程之道。 1.1 为什么使用

    2024年02月13日
    浏览(30)
  • 【Java--数据结构】提升你的编程段位:泛型入门指南,一看就会!

    泛型是一种编程概念,它允许我们编写可以适用于多种数据类型的代码。通过使用泛型,我们可以在编译时期将具体的 数据类型作为参数 传递给代码,从而实现代码 的复用和灵活性 。 在传统的编程中,我们通常需要为不同的数据类型编写不同的代码,这样会导致代码冗余

    2024年04月26日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包