【问题标题】:MWArray to C# array without jumping through hoopsMWArray 到 C# 数组,无需跳槽
【发布时间】:2013-11-25 23:33:06
【问题描述】:

我正在使用 MATLAB Builder NE 从 C# 运行一些 MATLAB 函数。

我有一个 MATLAB 1 行、n 列的双精度向量从我的包装 dll 返回为 MWArray,维度为 1,n。

从中获取 C# double[] 数组的最简单方法是什么?无论我做什么,我似乎都会得到更多MWArrays

【问题讨论】:

    标签: matlab matlab-deployment matlab-compiler


    【解决方案1】:

    这取决于您考虑跳过哪些障碍。我认为您需要转换为MWNumericArrayMWLogicalArrayMWCharArray 之一,并使用ToArray 方法,如here 所示。假设您有一个名为 aMWMWArray

    double[,] ad = (double[,]) ((MWNumericArray) aMW).ToArray(MWArrayComponent.Real);
    

    MWArray class documentation.

    正如 Patrick 所说,使用 ToVector() 而不是 ToArray() 来获取向量而不是二维数组。

    【讨论】:

    • 谢谢。你能添加如何获得 1 个暗淡的数组 double[] 吗?
    • 我一点也不精通 C#,但我想如果 aMW 是一维的,那么你可以改用 double[]。我无法尝试。
    • 为了得到一个向量而不是二维数组,使用ToVector()而不是ToArray()。对于那些需要将二维数组作为向量返回的人,请记住ToVector() 使用列主顺序,因此您可能希望在返回之前在 Matlab 代码中转置矩阵,以便获得行主顺序。
    • @Patrick 感谢您的信息。我已将其添加到答案中以供参考,但正如我所提到的,我并不真正了解 C#,所以我无法进一步评论。
    【解决方案2】:

    如果您使用兼容版本的 MWArray,则可以尝试 nuget package 与我创建的 MWArray 扩展。

    转换为“T”类型的数组只需通过泛型方法ToArray<T> 完成。在你的情况下double[] result = aMW.ToArray<double>()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多