【问题标题】:Producing a Java-formated matrix in MATLAB在 MATLAB 中生成 Java 格式的矩阵
【发布时间】:2017-04-01 09:21:21
【问题描述】:

我在 MATLAB 中有一个代码,最后给了我一个矩阵。我需要将这个矩阵带到 Java 并在那里使用它,但是当矩阵很大时,在 Java 中逐个元素地重写它真的很困难。所以我在MATLAB中写了这段代码:

function JavaMatrix = generateJavaFormatedMatrix(matrix, name) 
    for i=1:size(matrix,1)
        for j=1:size(matrix,2)
            JavaMatrix(i,j) = char([name '[' num2str(i-1) ']' '[' num2str(j-1) ']=' num2str(matrix(i,j)) ';' ' '])
        end
    end
end

我希望它对我有用,然后我只需要复制数组并将其粘贴到 Java 中。比如我在写如下命令的时候想让上面的代码做什么:

java_matrix = generateJavaFormatedMatrix(eye(3),'A')

下面是

A[0][0]=1; A[0][1]=0; A[0][2]=0;
A[1][0]=0; A[1][1]=1; A[1][2]=0;
A[2][0]=0; A[2][1]=0; A[2][2]=1;

但是,我得到的是以下错误:

Subscripted assignment dimension mismatch.

Error in generateJavaFormatedMatrix (line 5)
            JavaMatrix(i,j) = char([name '[' num2str(i-1) ']' '[' num2str(j-1) ']=' num2str(matrix(i,j)) ';' ' '])

非常感谢任何帮助。

【问题讨论】:

  • JavaMatrix(i,j) 只是一个元素(字符)。您正在为其分配一个完整的字符串。
  • 为什么需要这种方法而不是仅导出到中间文件?还是直接在java中导入?
  • @beaker,为什么不能将字符串分配为数组元素?
  • @excaza,因为我的 Java 代码最终会在 Android 设备上运行,而且我不希望每次都更新文本文件以将其发送到手机。
  • 试试这个:S = 'Hello, World!"。现在看看S 的大小。 13 个字符将无法容纳在一个字符的空间中。

标签: java matlab matrix


【解决方案1】:

这是一个可以解决问题的代码。

function s = generateJavaFormatedMatrix( A, sigdigs, name )
if nargin < 2
    sigdigs = 15;
end
format  = [ '%+1.', int2str(sigdigs), 'e' ]; 
s       = sprintf( 'final double [][] %s = {\n', name ); 
for row = 1:size(A,1)
    s   = [ s, '    { ' ];
    for col = 1:size(A,2)
        s   = [ s, num2str( A(row,col), format ) ];
        if ( col ~= size(A,2) )
            s   = [ s, ', ' ];
        end
    end
    if row == size(A,1)
        s   = sprintf( [ s, ' } \n' ] );
    else 
        s   = sprintf( [ s, ' }, \n' ] );
    end
end
s   = [ s, '};' ];

例如,运行这个命令

>> generateJavaFormatedMatrix( eye(3), 3, 'A' ):

将给予:

ans =

final double [][] A = {
    { +1.000e+00, +0.000e+00, +0.000e+00 }, 
    { +0.000e+00, +1.000e+00, +0.000e+00 }, 
    { +0.000e+00, +0.000e+00, +1.000e+00 } 
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    相关资源
    最近更新 更多