【问题标题】:Moving from Java types back to MATLAB types从 Java 类型回到 MATLAB 类型
【发布时间】:2011-06-19 16:04:04
【问题描述】:

我的 MATLAB 工作区中有一个 Java 数组(下例中为 my_array),我想将其转换回 MATLAB 数组。

whos my_array

  Name       Size            Class                                    

  my_array   20000x1            java.lang.Object[]

我在外部接口文档中找不到如何将 Java 类型转换回 MATLAB 类型。我唯一找到的是this(关于 MATLAB 单元的文档),它说我可以使用 MATLAB 单元来完成这项任务。

使用 MATLAB cells 似乎有点矫枉过正,特别是当我处理数千个相同类型的元素时(在本例中为 double)。有没有其他方法可以将 Java 对象移回 MATLAB 的本机类型?

【问题讨论】:

    标签: java matlab


    【解决方案1】:

    例子:

    %# example Object[] array
    my_array = javaArray('java.lang.Object', 5);
    for i=1:5, my_array(i) = java.lang.Double(i); end
    
    %# convert to MATLAB vector
    M = arrayfun(@(x)x, my_array);
    
    %# or equivalently
    M = cell2mat( cell(my_array) );
    
    >> whos M
      Name      Size            Bytes  Class     Attributes
    
      M         5x1                40  double      
    

    【讨论】:

    • 第二个 (cell2mat(cell(...))) 更好,因为它也适用于二维数组。
    【解决方案2】:

    当我处理数千个相同类型的元素时(在本例中为双精度)

    您是否可以控制相关的 Java 代码?如果是这种情况,请返回 double[] 而不是 Double[] 数组或 Object[] 数组 - MATLAB 会自动将 double[] 数组转换为 MATLAB 的双精度向量。

    【讨论】:

    • 如何在 matlab 中创建double[]
    【解决方案3】:

    请注意,您可以使用 matlab 中的 double 函数将 java 数字类型转换为 matlab 内部。

    参考http://www.kxcad.net/cae_MATLAB/techdoc/matlab_external/f6671.html#bq__508-1

    function rv = convertJava2DToMatlab (javaArray) 
        numrows  = max (size (javaArray));
        numcols  = max (size (javaArray(1,:)));
        rv (numrows, numcols) = 1; % preallocating the matrix to optimize
        for i = 1:numrows
            for j = 1:numcols 
                if (javaArray(i,j) == 1) 
                    rv (i,j) = double (javaArray(i,j));
                end
            end
        end
    end % end of function convertJava2DtoMatlab                               
    

    【讨论】:

      猜你喜欢
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      相关资源
      最近更新 更多