12
votes

Comment puis-je multiplier deux matrices en C #?

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

        }

    }


0 commentaires

10 Réponses :


3
votes

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.


0 commentaires



13
votes

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;


1 commentaires

Aussi system.drawing.drawing2d.matrix dans les vieux Winforms simples.



10
votes

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;
        }
    }


1 commentaires

C'est un exemple de travail. Je ne suggérerais que d'utiliser la mise en œuvre matricielle jumée pour une meilleure performance.



0
votes
46      31
24      18

0 commentaires

0
votes

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) { xxx


0 commentaires

0
votes

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. XXX


0 commentaires

0
votes

Voici mon code: 4 * 4 matrice xxx

}


0 commentaires

7
votes

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 . Il est extrêmement facile de multiplier des matrices: xxx

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 .


0 commentaires