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.pswp.cn/web/41555.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41555.shtml
英文地址,請注明出處:http://en.pswp.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;…