2016-04-24 9 views
0

Ich habe drei diagonale Arrays A,B,C alle sind double der Größe 508X508. Alle Werte über der Hauptdiagonalen sind nicht Null, und jede andere Zelle enthält null.Vergleichen drei diagonale Array und finden Sie die beiden am ähnlichsten sind

Daten in beiden A and B werden vom Sensor in Day-1 und dann Day-2 gesammelt. In der Zwischenzeit werden die optimalen Daten in C gespeichert.

Meine Frage ist, wie zu finden, welche der Arrays A,B ist ähnlicher zu C ???

Was ist die beste statistische Methode, um das zu erreichen, wenn möglich, vielleicht ein C# -Code Snap?

+0

Wie wäre es "Brute-Force", wie 'Doppel Abweichung = 0; für (var i = 0; i <äußere Länge; i ++) {für (var j = 0; j Corak

Antwort

1

Ich denke, Corak wies Sie auf den richtigen Weg. Wählen Sie einfach ein Abstandsmaß, berechnen Sie die Gesamtsumme der Abstände für jede Matrix.

Probieren Sie etwas wie dieses

public double ComputeArrayDistance(double[,] firstArray, double[,] secondArray) 
    { 
     // some quick and dirty guardClauses to prevent hedaches 
     if (firstArray.GetLength(0) != firstArray.GetLength(1)) throw new ArgumentException("the first array is not squared .."); 
     if (secondArray.GetLength(0) != secondArray.GetLength(1)) throw new ArgumentException("the second array is not squared .."); 
     if (firstArray.GetLength(0) != secondArray.GetLength(0)) throw new ArgumentException("the size of two array don't match"); 

     double totalDistance = 0; 

     // if the array(matrix) is lower triangular 
     for(int i = 0; i < firstArray.GetLength(0); i++) 
     { 
      for(int j = 0; j <= i; j++) 
      { 
       totalDistance += this.GetDistance(firstArray[i, j], secondArray[i, j]); 
      } 
     } 

     return totalDistance; 
    } 

    private double GetDistance(double elemOne, double elemTwo) 
    { 
     // an acceptable measure should be the square of the difference 
     return Math.Pow((elemOne - elemTwo), 2); 
    } 
+1

Wie das OP es beschreibt, befinden sich die signifikanten Werte im oberen Dreieck, also sollte für (int j = i; j Corak

+0

Das ist was ich brauche, danke @ Paolo –