Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我在MATLAB中创建了一个数组,其中包含许多包含双精度数组的单元格类型对象。它基本上是一个数组,每个单元格都是一个double数组。
我想要做的是以某种方式导出这些,以便随后可以将数据作为int类型的数组的参差不齐的数组插入Java中。是否有关于如何最好地做到这一点的想法? 回答: 在Matlab中构造Java原语数组很困难,因为Matlab希望将其自动装箱成Matlab数组。 您可以做的是创建一个Java类来帮助您,使用方法签名来指导Matlab的自动装箱。这样的包装层可能比通过文本导出的往返过程更快,更方便。 package test; /** * Class to help build Java arrays from Matlab. */ public class JavaArrayBuilder { /** * Assign an array into a larger ragged array * @param array ragged array you're building * @param i index into array * @param subarray this gets autoboxed to int[] from Matlab */ public static void assignIntArray(Object[] array, int i, int[] subarray) { array[i] = subarray; } } 然后您可以像这样从Matlab调用它。 function ja = build_int_array mynums = { 1:2, 1:5, 1:7 }; % Create a Java array of arrays dummy = java.lang.Object(); ja = java.lang.reflect.Array.newInstance(dummy.getClass(), numel(mynums)); for i = 1:numel(mynums) test.JavaArrayBuilder.assignIntArray(ja, i-1, mynums{i}); end % Now you have a Java ragged array, albeit as Object[] instead of int[][] 之后,您将需要在Java中将Object []数组转换为int [] [],因为Matlab会将Java int [] []拆箱回到Matlab数组。将其保留为M代码中的Object []可以对其进行保护。 您也可以使用类似的包装器来构建列表或其他集合。这可能会更好地与您的其他Java代码配合,并且Collections不会在Matlab中解包。 更多&回答... |
![]() |
![]() |