使用F#创建可从C#使用的矩阵程序集

5
在C#中没有内置的矩阵函数,但是在F# powerpack中有。与其使用第三方或开源的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();
    }
  }
}
2个回答

6

你能否直接在C#中引用需要的F#库并直接使用它?

我曾经类似地引用了FSharp.Core.dll以获取其中的内容。

Microsoft.FSharp.Math.BigInt class.

所以,您可以直接引用 FSharp.PowerPack.dll 以访问相关内容。
Microsoft.FSharp.Math.Matrix<A> class

好主意。我会尝试一下,但我怀疑我不会以那个价格得到运算符。 - Benjol

0

XNA框架中有非常好的矩阵类。我会引用那个dll,或者最可能使用反编译器将代码复制粘贴到我的解决方案中。我知道这并没有直接回答你的问题,但这只是另一个想法...


这些矩阵对于处理图形变换来说比较小。 - cfeduke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接