调用C# MathNet.Numerics进行矩阵运算

By jerryxjr1220 at 2022-07-07 • 0人收藏 • 174人看过

原来自己写过一个3x3矩阵的运算程序,但是仅限于3阶矩阵,要是其他矩阵就不行了。

C# 的MathNet.Numerics是一个非常强大的数学运算库,可以进行各种计算,矩阵计算只是其中很小一部分功能。

import dotNet;
dll = dotNet.loadFile("\res\MathNet.Numerics.dll");
MathNet = dll.import("MathNet.Numerics.LinearAlgebra.Double");
//创建矩阵
matrix1 = MathNet.DenseMatrix.Create(3, 3, 0.0);
matrix2 = MathNet.DenseMatrix.Create(3, 3, 0.0);
//设置矩阵
matrix1.SetRow(0, { 1.0, 2.0, 3.0 } );
matrix1.SetRow(1, { 4.0, 5.0, 6.0 } );
matrix1.SetRow(2, { 7.0, 8.0, 9.0 } );

matrix2.SetRow(0, { 3.0, 2.0, 1.0 } );
matrix2.SetRow(1, { 6.0, 5.0, 4.0 } );
matrix2.SetRow(2, { 9.0, 8.0, 7.0 } );

//转置
t = matrix2.Transpose();
//加减
matrix3 = matrix1.Add(matrix2.Multiply(-1));
//乘除
matrix3 = matrix1.Multiply(t);
//按行读取,在MathNet.Numerics中的矩阵下标都是从0开始
row0 = matrix3.Row(0).AsArray();
//按列读取,在MathNet.Numerics中的矩阵下标都是从0开始
col1 = matrix3.Column(1).AsArray();


3 个回复 | 最后更新于 2022-07-08
2022-07-08   #1

对比了一下,发现好像还是调用python的numpy库更方便,aardio已经封装了numpy库

import console;
import py3;
import py3.lib.numpy;

np = py3.lib.numpy;
//创建矩阵
matrix1 = np.matrix({
	{69.96782609,	114.5065934,	154.6747253,	199.1703297,	232.666875},
	{ -60.63565217,	-99.43406593,	-133.8362637,	-171.2516484,	-201.15125 },
	{ -49.87043478,	-83.5967033,	-112.5802198,	-144.2593407,	-169.301875 } });
matrix2 = np.matrix({
	{ 3.5,	6.3,	8.7,	10.9,	12.9},
	{ 0, 0, 0, 0, 0 },
	{ 0, 0, 0, 0, 0 } });


res = matrix2.dot(matrix1.I).tolist().parseValue();

console.dump(res);


2022-07-08   #2

C#的计算会不会快一些,毕竟科学计算很看重速度

2022-07-08   #3

回复#2 @wangming :

我没有刻意去测试速度,至少我是没感觉出来C#更快

登录后方可回帖

登 录
信息栏
公告:
个人博客
专注分享
可在分享中适当提问
谢绝纯提问
否则不再提醒一律
删帖
谢谢合作!



本站域名:HtmLayout.Cn
aardio可以快速开发上位机,本站主要记录了学习过程中遇到的问题和解决办法及aardio代码分享

这里主要专注于aardio学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.

Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
空间赞助:才仁机械
Loading...