我在
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中解包。
更多&回答...