2008-11-07 4 views
5

C#에는 내장 된 행렬 함수가 없지만 F # 파워 팩에 있습니다.F #을 사용하여 C#에서 사용할 수있는 매트릭스 어셈블리 만들기

제 3 자 또는 오픈 소스 C# 라이브러리를 사용하는 대신 F #에서 내 자신을 굴려서 유용한 비트를 C#에 노출시키는 것에 대해 궁금합니다.

누구나 이미이 문제를 생각하거나 시도했는지, 그리고 좋은 생각인지 궁금합니다.

클래스 또는 정적 함수로드로 노출해야합니까?

아니면 C# 래퍼 클래스를 만들고 F #으로 전화를해야합니까? 또는 F #에서 입력 및 출력으로 C# 클래스를 사용합니까?

의견이 있으십니까? 아래 Hath

답변 감사합니다 : 당신이 (뿐만 아니라 운영자!) 직접 C#으로은 F # 라이브러리를 사용할 수는 :

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

답변

6

당신은 C#에서 필요한 f # 라이브러리를 참조하고 그것을 직접 사용할 수 있습니까?

나는 그래서 당신은 아마 그냥

Microsoft.FSharp.Math.Matrix<A> class 
에서 얻을 수있는 FSharp.PowerPack.dll를 참조 할 수

Microsoft.FSharp.Math.BigInt class. 

에서 얻을 수있는 FSharp.Core.dll을 참조하는 비슷한 일을했습니다

+0

우수 아이디어. 나는 그 가격으로 통신 수를 얻지 못할 것이라고 생각하지만 시도해 볼 것입니다. – Benjol

0

XNA Framework에서 매우 좋은 매트릭스 클래스가 있습니다. 그 중 dll을 참조하거나, 리플렉터를 사용하고 코드를 복사하여 내 솔루션에 붙여 넣습니다. 나는 그것이 당신의 질문에 직접적으로 대답하지 않는다는 것을 안다. 단지 또 다른 생각이다. ...

+0

이러한 행렬은 그래픽 변환과 관련하여 작습니다. – cfeduke