2008-11-07 11 views
5

Nie ma wbudowanych funkcji macierzy w języku C#, ale są one w pakiecie F #.O użyciu F # do utworzenia zestawu macierzy używanego z C#

Zamiast używać biblioteki stron trzecich lub biblioteki C# o otwartym kodzie źródłowym, zastanawiam się, czy nie przetworzyć mojej własnej w języku F #, i ujawnić przydatne bity w języku C#.

Zastanawiasz się, czy ktoś już o tym pomyślał lub wypróbował i czy jest to dobry pomysł.

Czy powinienem wystawić go jako klasę lub ładunek funkcji statycznych?

Czy powinienem utworzyć klasę opakowania C# i mieć to wywołanie do F #? A może F # używa klasy C# jako wejścia i wyjścia?

Jakieś myśli?

odpowiedzi dzięki Hath poniżej: Można użyć F # biblioteki bezpośrednio w C# (operatorów, jak dobrze!):

using System; 
using System.Text; 
using Microsoft.FSharp.Math; 

namespace CSharp 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 

     double[,] x = { { 1.0, 2.0 }, { 4.0, 5.0 } }; 
     double[,] y = { { 1.0, 2.0 }, { 7.0, 8.0 } }; 
     Matrix<double> m1 = MatrixModule.of_array2(x); 
     Matrix<double> m2 = MatrixModule.of_array2(y); 
     var mp = m1 * m2; 

     var output = mp.ToArray2(); 
     Console.WriteLine(output.StringIt()); 

     Console.ReadKey(); 
    } 
    } 

    public static class Extensions 
    { 
    public static string StringIt(this double[,] array) 
    { 
     var sb = new StringBuilder(); 
     for (int r = 0; r < array.Length/array.Rank; r++) 
     { 
      for (int c = 0; c < array.Rank; c++) 
      { 
       if (c > 0) sb.Append("\t"); 
       sb.Append(array[r, c].ToString()); 
      } 
      sb.AppendLine(); 
     } 
     return sb.ToString(); 
    } 
    } 
} 

Odpowiedz

6

czy możesz nie tylko odwołać się do biblioteki f #, której potrzebujesz w języku C# i używać jej bezpośrednio?

Robiłem coś podobnego do odwoływania się FSharp.Core.dll dostać na

Microsoft.FSharp.Math.BigInt class. 

więc prawdopodobnie można po prostu odwołać FSharp.PowerPack.dll dostać na

Microsoft.FSharp.Math.Matrix<A> class 
+0

Doskonały pomysł. Spróbuję, choć podejrzewam, że nie zdobędę operatorów za tę cenę. – Benjol

0

Istnieją bardzo dobre klasy Matrix w XNA Framework. Chciałbym albo odwołać się do tego dll, albo najprawdopodobniej użyć reflektora i skopiować i wkleić kod do mojego własnego rozwiązania. Wiem, że to nie odpowiada bezpośrednio na twoje pytanie, ale tylko inny pomysł ...

+0

Te macierze są niewielkie do pracy z przekształcaniem grafiki. – cfeduke

Powiązane problemy