【发布时间】: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
我正在使用 MATLAB Builder NE 从 C# 运行一些 MATLAB 函数。
我有一个 MATLAB 1 行、n 列的双精度向量从我的包装 dll 返回为 MWArray,维度为 1,n。
从中获取 C# double[] 数组的最简单方法是什么?无论我做什么,我似乎都会得到更多MWArrays。
【问题讨论】:
标签: matlab matlab-deployment matlab-compiler
这取决于您考虑跳过哪些障碍。我认为您需要转换为MWNumericArray、MWLogicalArray 或MWCharArray 之一,并使用ToArray 方法,如here 所示。假设您有一个名为 aMW 的 MWArray:
double[,] ad = (double[,]) ((MWNumericArray) aMW).ToArray(MWArrayComponent.Real);
正如 Patrick 所说,使用 ToVector() 而不是 ToArray() 来获取向量而不是二维数组。
【讨论】:
aMW 是一维的,那么你可以改用 double[]。我无法尝试。
ToVector()而不是ToArray()。对于那些需要将二维数组作为向量返回的人,请记住ToVector() 使用列主顺序,因此您可能希望在返回之前在 Matlab 代码中转置矩阵,以便获得行主顺序。
如果您使用兼容版本的 MWArray,则可以尝试 nuget package 与我创建的 MWArray 扩展。
转换为“T”类型的数组只需通过泛型方法ToArray<T> 完成。在你的情况下double[] result = aMW.ToArray<double>()。
【讨论】: