MWArray 到 C# 数组,无需跳槽
Posted
技术标签:
【中文标题】MWArray 到 C# 数组,无需跳槽【英文标题】:MWArray to C# array without jumping through hoops 【发布时间】:2013-11-25 23:33:06 【问题描述】:我正在使用 MATLAB Builder NE 从 C# 运行一些 MATLAB 函数。
我有一个 MATLAB 1 行、n 列的双精度向量从我的包装 dll 返回为 MWArray
,维度为 1,n。
从中获取 C# double[]
数组的最简单方法是什么?无论我做什么,我似乎都会得到更多MWArrays
。
【问题讨论】:
【参考方案1】:这取决于您考虑跳过哪些障碍。我认为您需要转换为MWNumericArray
、MWLogicalArray
或MWCharArray
之一,并使用ToArray
方法,如here 所示。假设您有一个名为 aMW
的 MWArray
:
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>()
。
【讨论】:
以上是关于MWArray 到 C# 数组,无需跳槽的主要内容,如果未能解决你的问题,请参考以下文章