J'aime décrit dans le titre, existe-t-il une bibliothèque dans le cadre Microsoft qui permet de multiplier deux matrices ou dois-je écrire ma propre méthode pour le faire? // J'ai une réponse à cela par maintenant
deuxième question: J'ai écrit cette classe multiple avec une méthode multitmyrix, mais cela ne fonctionne pas comme je le souhaite. Quelqu'un peut-il aider et dire où j'ai commis une erreur? P>
class multi
{
public void MultiplyMatrix(double[,] _A, double[,] _B, int _n, int _m, int _r)
{
int n, m, r;
double si;
n = _n;
m = _m;
r = _r;
double[,] A = new double[n, m];
double[,] B = new double[m, r];
double[,] C = new double[n, r];
A = _A;
B = _B;
try
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < r; j++)
{
si = 0;
for (int k = 0; k < m; k++)
{
si += A[i, m + k] + B[k, r + j];
}
C[i, r + j] = si;
}
}
for (int i = 0; i < C.Length; i++)
{
for (int j = 0; j < C.Length; j++)
{
Console.Write(C[i, j]+" ");
if (j % 3 == 0)
Console.WriteLine();
}
}
}
catch (IndexOutOfRangeException) { } // I always get this exception
}
}
10 Réponses :
Il n'y a rien intégré à .NET. Vous devrez écrire vous-même la multiplication ou utiliser une bibliothèque tierce partie. J'ai blogué < / a> environ un moyen d'obtenir cette comparaison comparant deux implémentations différentes: un algorithme naïf standard et un de code dangereux. P>
Il n'y a pas de bibliothèques de ce type. Sauf si vous utilisez xna - il a un Il y a beaucoup matrice bibliothèques a> pour .net cependant. p> matrice code> classe, bien qu'il soit limité et conçu pour les jeux 3D. P>
Xna non requis, Winforms a système.Drawing.Drawing2d.Matrix
Bibliothèque matricielle CSML - C # est un emballage compact et léger pour une algèbre linéaire numérique. De nombreuses opérations matricielles connues de Matlab, Scilab et Co. sont implémentées. Voir Ceci ! P>
Bien qu'il n'y ait pas de cadre de mathématiques intégré pour ce faire dans .NET (pourrait utiliser la bibliothèque de mathématiques de XNA), il existe une matrice code> dans le System.Windows.Media Espace de noms. La structure matricielle a un Multiply Method qui prend une autre matrice et génère une matrice.
Matrix matrix1 = new Matrix(5, 10, 15, 20, 25, 30); Matrix matrix2 = new Matrix(2, 4, 6, 8, 10, 12); // matrixResult is equal to (70,100,150,220,240,352) Matrix matrixResult = Matrix.Multiply(matrix1, matrix2); // matrixResult2 is also // equal to (70,100,150,220,240,352) Matrix matrixResult2 = matrix1 * matrix2;
Aussi system.drawing.drawing2d.matrix code> dans les vieux Winforms simples.
Multiplier 2 matrice:
public double[,] MultiplyMatrix(double[,] A, double[,] B)
{
int rA = A.GetLength(0);
int cA = A.GetLength(1);
int rB = B.GetLength(0);
int cB = B.GetLength(1);
double temp = 0;
double[,] kHasil = new double[rA, cB];
if (cA != rB)
{
Console.WriteLine("matrik can't be multiplied !!");
}
else
{
for (int i = 0; i < rA; i++)
{
for (int j = 0; j < cB; j++)
{
temp = 0;
for (int k = 0; k < cA; k++)
{
temp += A[i, k] * B[k, j];
}
kHasil[i, j] = temp;
}
}
return kHasil;
}
}
C'est un exemple de travail. Je ne suggérerais que d'utiliser la mise en œuvre matricielle jumée pour une meilleure performance.
46 31 24 18
Ci-dessous est la méthode pour multiplier Int [3,4] matrice avec une matrice INT [4,3], il a une complexité de temps de O (N Cube) ou du programme de classe Cube
{
Void statique principal (chaîne [] args)
{ p>
J'ai écrit un petit programme pour multiplier deux matrices 3 x 3, dans le cadre de mon réseau de neurones pour mon projet de niveau A. J'espère que les gens le trouveront utiles.
Voici mon code: 4 * 4 matrice } p> p>
Bien que vous puissiez multiplier des matrices par une approche itérative (pour les boucles), effectuer les calculs avec une algèbre linéaire nettoyer votre code et vous donnera des gains de performance plusieurs fois plus rapides!
Il y a une bibliothèque gratuite disponible dans Nuget - mathnet.numerics b>. Il est extrêmement facile de multiplier des matrices: p> Il n'a pas de dépendances et peut être utilisé dans .NET CORE 2.0, ce qui en fait un excellent choix pour Éviter la matrice itérative techniques de multiplication et profiter de l'algèbre linéaire i>. p> p>