C# MathNet

  • `Vector`
    • 使用 `Build.Dense` 创建列向量:
    • 列向量转行向量(行矩阵):
    • 使用 `DenseOfArray` 方法:
    • 使用 `PointwiseMultiply` 进行向量元素级乘法:
    • 计算向量的点积(内积):
    • 访问向量的特定元素:
    • 遍历向量中的所有元素:
    • 输出向量:
  • `Matrix`
    • 创建矩阵:
    • 矩阵属性访问:
    • 矩阵元素访问和赋值:
    • 矩阵运算:
    • 矩阵分解和求解:
    • 读写矩阵:
    • 矩阵的转置:
    • 逐点乘法 `PointwiseMultiply`
    • `SetColumn`
    • `TransposeThisAndMultiply` `D'*D`
    • `Inverse` D^(-1)
    • 矩阵的打印和字符串表示:

Vector

MathNet.Numerics 中,Vector<T> 是表示向量的类。Vector<T> 可以是列向量或行向量,具体取决于你如何创建它以及如何使用它。以下是一些创建和使用 Vector<T> 的常见方法:

使用 Build.Dense 创建列向量:

var vector = Vector<double>.Build.Dense(new double[] {1, 2, 3});

列向量转行向量(行矩阵):

var b = Vector<double>.Build.Dense(5, 0);
Matrix<double> rowVector = b.ToRowMatrix();

使用 DenseOfArray 方法:

 var vectorFromArray = Vector<double>.Build.DenseOfArray(new double[] { 1, 2, 3 });

使用 PointwiseMultiply 进行向量元素级乘法:

var vector1 = Vector<double>.Build.Dense(new double[] {1, 2, 3});
var vector2 = Vector<double>.Build.Dense(new double[] {4, 5, 6});var product = vector1.PointwiseMultiply(vector2);
Console.WriteLine(product);
DenseVector 3-Double4
10
18

计算向量的点积(内积):

var vector1 = Vector<double>.Build.Dense(new double[] { 1, 2, 3 });
var vector2 = Vector<double>.Build.Dense(new double[] { 4, 5, 6 });var dotProduct = vector1.DotProduct(vector2);
Console.WriteLine(dotProduct);
32

获取向量的转置(对于列向量,转置将返回行向量,反之亦然):

// 创建一个列向量
var vector = Matrix<double>.Build.DenseOfArray(new double[,] { { 1}, { 2}, { 3} });
// 获取列向量的转置,即行向量
var transposedVector = vector.Transpose();
Console.WriteLine(transposedVector);
DenseMatrix 1x3-Double
1  2  3

访问向量的特定元素:

var vector3 = Vector<double>.Build.Dense(new double[] { 1, 2, 3 });
double firstElement = vector3[0];Console.WriteLine(firstElement);设置向量的特定元素:
1

遍历向量中的所有元素:

var vector3 = Vector<double>.Build.Dense(new double[] { 1, 2, 3 });
foreach (var element in vector3) {Console.WriteLine(element);
}
1
2
3

输出向量:

var vector3 = Vector<double>.Build.Dense(new double[] { 1, 2, 3 });Console.WriteLine(vector3);
DenseVector 3-Double
1
2
3

Matrix

C# 中,使用 MathNet.Numerics 库来处理矩阵是一个高效且功能丰富的选择。以下是一些关于如何在 C# 中使用 MathNet.Numerics 库创建和操作矩阵的基本步骤:

创建矩阵:

using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Double;using System;namespace forCode20192 {class Program {static void Main(string[] args) {var D = Matrix<double>.Build.Dense(2, 9, 1);Console.WriteLine(D);Console.ReadKey();}}
}
DenseMatrix 2x9-Double
1  1  1  1  1  1  1  1  1
1  1  1  1  1  1  1  1  1

矩阵属性访问:

可以访问矩阵的行数和列数。

int rowCount = matrix.RowCount;
int columnCount = matrix.ColumnCount;

矩阵元素访问和赋值:

可以通过索引访问和修改矩阵中的元素。

double element = matrix[0, 1]; // 获取第 1 行第 2 列的元素
matrix[0, 1] = 10; // 设置第 1 行第 2 列的元素为 10

矩阵运算:

MathNet.Numerics 提供了矩阵加法、减法、数乘、矩阵乘法等基本矩阵运算。

var a = Matrix<double>.Build.Dense(2, 2, 2);
a[1, 1] = 0;
var b = Matrix<double>.Build.DenseOfArray(new double[,] { {1, 0}, {0, 1} }
);Console.WriteLine(a*b);
DenseMatrix 2x2-Double
2  2
2  0

矩阵分解和求解:

MathNet.Numerics 支持多种矩阵分解方法,如 LU 分解、QR 分解等,并可以用来求解线性方程组。

var lu = matrix.LU();
var solution = lu.Solve(vector); // 假设 vector 是已知的向量

读写矩阵:

MathNet.Numerics 支持从文件中读取矩阵,或将矩阵保存到文件,支持的格式包括 CSVMAT 等。

var matrixFromFile = Matrix<double>.Read("path/to/matrix.csv", hasHeaders: true
);
matrix.Write("path/to/matrix.csv", DelimitedWriter.Write);

矩阵的转置:

可以使用 Transpose 方法获取矩阵的转置。

var transposedMatrix = matrix.Transpose();

逐点乘法 PointwiseMultiply

MathNet.Numerics 中,PointwiseMultiply 方法用于对两个向量进行逐点乘法(也称为元素乘法或哈达玛乘法)。逐点乘法是指将两个向量的对应元素相乘,生成一个新的向量,其中新向量的每个元素都是原始向量对应元素的乘积。

Vector<double> vectorA = Vector<double>.Build.Dense(new double[] { 1.0, 2.0, 3.0 }
);
Vector<double> vectorB = Vector<double>.Build.Dense(new double[] { 4.0, 5.0, 6.0 }
);// 执行逐点乘法
Vector<double> result = vectorA.PointwiseMultiply(vectorB);// 输出结果向量
Console.WriteLine(result);
DenseVector 3-Double4
10
18

SetColumn

MathNet.Numerics 中,SetColumn 方法用于设置矩阵中的一个列向量。这个方法属于 Matrix<T> 类,其中 T 可以是 doublecomplex 或其他数值类型。通过 SetColumn 方法,你可以将一个向量(作为参数传递)设置为矩阵的指定列。

// 创建一个 3x3 的矩阵
Matrix<double> matrix = Matrix<double>.Build.Dense(3, 3);// 创建一个列向量
Vector<double> columnVector = Vector<double>.Build.Dense(new double[] { 1.0, 2.0, 3.0 }
);// 将列向量设置为矩阵的第二列
matrix.SetColumn(1, columnVector);// 输出修改后的矩阵
Console.WriteLine(matrix);
DenseMatrix 3x3-Double
0  1  0
0  2  0
0  3  0

TransposeThisAndMultiply D'*D

MathNet.Numerics 中,TransposeThisAndMultiply 方法是一个高效的运算符,用于执行矩阵的转置-乘法操作。这个方法首先转置调用它的矩阵,然后将转置后的矩阵与另一个矩阵相乘。这种方法在某些情况下比先显式转置矩阵然后进行乘法更高效,因为它可以避免创建转置矩阵的副本。

// 创建两个矩阵
Matrix<double> matrixA = Matrix<double>.Build.DenseOfArray(new double[,] { { 1, 2, 3 }, { 4, 5, 6 } }
);Matrix<double> matrixB = Matrix<double>.Build.DenseOfArray(new double[,] { { 7, 8 }, { 9, 10 } }
);// 使用 TransposeThisAndMultiply 方法
Matrix<double> result = matrixA.TransposeThisAndMultiply(matrixB);// 输出结果矩阵
Console.WriteLine(result);
DenseMatrix 3x2-Double
43  48
59  66
75  84

Inverse D^(-1)

求可逆矩阵的逆

// 创建一个方阵
Matrix<double> matrix = Matrix<double>.Build.DenseOfArray(new double[,] { { 1, 2 }, { 3, 4 } }
);// 计算矩阵的逆
Matrix<double> inverseMatrix = matrix.Inverse();// 输出逆矩阵
Console.WriteLine(inverseMatrix);
DenseMatrix 2x2-Double-2     1
1.5  -0.5

矩阵的打印和字符串表示:

MathNet.Numerics 提供了方便的 ToString 方法,用于打印矩阵的字符串表示。

Console.WriteLine(matrix);

请注意,上述代码示例中的 matrixvectorMatrix<T>Vector<T> 类型的对象,T 通常是 doublefloatComplexComplex32 中的一种。MathNet.Numerics 是一个开源的数值计算库,专为 .NETMono 设计,提供了广泛的数值计算方法和算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公众号文章阅读20w+?你猜腾讯给了我多少钱?

前两天写的一篇文章&#xff0c; 《1000T的文件怎么能快速从南京传到北京&#xff1f;最佳方案你肯定想不到》 一不小心被平台推荐&#xff0c;阅读量居然达到了20w&#xff08;这篇收益在文章底部&#xff01;&#xff09;。 留言也是相当精彩 说来惭愧&#xff0c;这篇文章我…

【74LS163做24进制计数器】2021-11-19

缘由用74LS163做24进制计数器-其他-CSDN问答,仿真multisim两个74LS163芯片如何构成47进制计数器-吐槽问答-CSDN问答 参考74ls163中文资料汇总&#xff08;74ls163引脚图及功能_内部结构图及应用电路&#xff09; - 电子发烧友网

苍穹外卖 ...待更新

苍穹外卖 1、 阿里云OSS2、菜品分类查询 1、 阿里云OSS 工具类 package com.sky.utils;import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; import lombok.AllArgsConstructor…

深入理解Qt智能指针

目录 1.引言 2.共享数据 2.1.特点 2.2.QSharedData 2.3.隐式共享 2.4.显示共享 3.共享指针 3.1.QSharedPointer 3.2.QWeakPointer 4.范围指针 4.1.QScopedPointer 4.2.QScopedArrayPointer 5.追踪特定QObject对象生命 6.总结 1.引言 在 Qt 中&#xff0c;智能指针…

计算样本之间的相似度

文章目录 前言一、距离度量1.1 欧几里得距离&#xff08;Euclidean Distance&#xff09;1.2 曼哈顿距离&#xff08;Manhattan Distance&#xff09;1.3 切比雪夫距离&#xff08;Chebyshev Distance&#xff09;1.4 闵可夫斯基距离&#xff08;Minkowski Distance&#xff09…

docker容器技术、k8s的原理和常见命令、用k8s部署应用步骤

容器技术 容器借鉴了集装箱的概念&#xff0c;集装箱解决了什么问题呢&#xff1f;无论形状各异的货物&#xff0c;都可以装入集装箱&#xff0c;集装箱与集装箱之间不会互相影响。由于集装箱是标准化的&#xff0c;就可以把集装箱整齐摆放起来&#xff0c;装在一艘大船把他们…

浏览器插件利器-allWebPluginV2.0.0.14-stable版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX插件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持谷歌、火狐等浏…

Spring Boot+Blockchain:区块链入门Demo

1. 引言 区块链技术近年来迅速发展&#xff0c;其去中心化、不可篡改和透明性等特点吸引了众多开发者和企业的关注。为了便于理解和应用区块链技术&#xff0c;本文将介绍如何使用Spring Boot集成区块链&#xff0c;构建一个简单的区块链Demo。 2. 项目准备 2.1 环境要求 在…

MYSQL安装及环境配置

1.数据库下载 1.1 浏览器下载相应版本&#xff0c;如果相应版本不在此页&#xff0c;可点击Archives &#xff0c;然后选择相应版本 https://dev.mysql.com/downloads/mysql/ 1.2 放置指定目录&#xff0c;并将其解压 2.配置数据库环境变量 2.1 使用电脑win键 Q &#xff0c;…

在C++中使用的错误处理策略

在C中&#xff0c;错误处理是一个重要且复杂的主题&#xff0c;因为它要求开发者在设计和编码时考虑到程序可能遇到的各种异常情况。C提供了几种不同的机制来处理错误&#xff0c;每种机制都有其适用的场景和优缺点。下面我将概述几种常见的C错误处理策略&#xff1a; 1. 返回…

SQL的时间格式和文本灵活转换

日期的格式&#xff0c;在日常的数据分析中&#xff0c;常常使用 特别是在按照日、月、年进行汇总分析&#xff0c;使用起来&#xff0c;往往会有差异 如果格式比较复杂&#xff0c;可以考虑进行文本转化的处理 这里有比较推荐的函数&#xff1a; 1.CONVERT()函数 适用于SQL …

51单片机STC89C52RC——16.1 五项四线步进电机

目的/效果 让步进电机 正向转90度&#xff0c;逆向转90度 一&#xff0c;STC单片机模块 二&#xff0c;步进电机 2.2 什么是步进电机&#xff1f; 步进电机可以理解为&#xff1a;是一个按照固定步幅运动的“小型机器”。它与普通电机不同点在于&#xff0c;普通电机可以持…

CompletionService

必备知识&#xff1a; 三种创建线程的方式 java线程池 CompletionService是Java并发库中的一个接口&#xff0c;用于简化处理一组异步任务的执行和结果收集。它结合了Executor和BlockingQueue的功能&#xff0c;帮助管理任务的提交和完成。CompletionService的主要实现类是Exe…

前端必修技能:高手进阶核心知识分享 - CSS 阴影属性详解

CSS 涉及设计到阴影的相关内容包括三个方面&#xff1a;box-shadow属性&#xff08;盒子阴影&#xff09;、 text-shadow属性&#xff08;文本阴影&#xff09;、drop-shadow滤镜。 本篇文章旨在详细介绍和分析三种阴影的具体参数设置和典型用例。 box-shadow属性&#xff08;…

预防临床预测模型中可能的“算法歧视”

预防临床预测模型中可能的“算法歧视” 概要&#xff1a;如果训练数据中存在性别方面的不均衡&#xff0c;会让训练出的模型存在性别方面的“算法歧视”&#xff0c;进而导致某种性别下存在更多的误诊误治&#xff0c;最终造成医疗资源分配的不公平的伦理问题&#xff0c;导致模…

04.C1W3.Vector Space Models

往期文章请点这里 目录 Vector Space ModelsWord by Word and Word by DocWord by Document DesignWord by Document DesignVector Space Euclidean DistanceEuclidean distance for n-dimensional vectors Euclidean distance in PythonCosine Similarity: IntuitionCosine S…

STM32-SPI和W25Q64

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. SPI&#xff08;串行外设接口&#xff09;通信1.1 SPI通信简介1.2 硬件电路1.3 移位示意图1.4 SPI时序基本单元1.5 SPI时序1.5.1 发送指令1.5.2 指定地址写1.5.3 指定地址读 2. W25Q642.1 W25Q64简介2.2 硬件电路2…

嵌入式C语言面试相关知识——内存管理(不定期更新)

嵌入式C语言面试相关知识——内存管理&#xff08;不定期更新&#xff09; 一、博客声明二、自问题目1、嵌入式系统的内存布局是怎么样的&#xff1f;2、动态内存分配在嵌入式系统中的使用有什么注意事项&#xff1f;3、什么是内存碎片&#xff0c;如何减少内存碎片&#xff1f…

win11自动删除文件的问题,安全中心提示

win11自动删除文件的问题&#xff0c;解决方法&#xff1a; 1.点击任务栏上的开始图标&#xff0c;在显示的应用中&#xff0c;点击打开设置。 或者点击电脑右下角的开始也可以 2.点击设置。也可以按Wini打开设置窗口。 3.左侧点击隐私和安全性&#xff0c;右侧点击Windows安全…

我国网络安全领域有哪些法律法规?主要内容是什么?

1. 背景介绍 网络信息安全方面的法规在全球范围内都有相应的立法&#xff0c;我们主要的立法有《网络安全法》、《密码法》、《数据安全法》以及《个人信息保护法》。当前也有一些相关的条例和管理办法&#xff0c;接下来就为大家一一介绍。 2. 法规介绍 在中国&#xff0c;…