![](/img/trans.png)
[英]Is there a way to pass back 2 different data types from a method in java?
[英]Moving from Java types back to MATLAB types
我在我的MATLAB工作区中有一个Java数组(下例中的my_array
),我想将其转换回MATLAB数组。
whos my_array
Name Size Class
my_array 20000x1 java.lang.Object[]
我无法在外部接口文档中找到如何将Java类型转换回MATLAB类型。 我发现的唯一的事情就是这个 (关于MATLAB单元的文档),它说我可以用MATLAB单元来完成这个任务。
使用MATLAB cells
似乎有点矫枉过正,特别是当我处理相同类型的数千个元素时(在本例中为double
)。 有没有其他方法将Java对象移回MATLAB的本机类型?
例:
%# 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
当我处理相同类型的数千个元素时(在这种情况下,双倍)
你是否掌控了有问题的Java代码? 如果是这种情况,返回double[]
而不是Double[]
数组或Object[]
数组 - MATLAB将自动将double[]
数组转换为double[]
精度的MATLAB向量。
请注意,您可以使用matlab中的double函数将java neumeric类型转换为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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.