我有一個在MATLAB中創建的數組,其中包含許多包含雙精度數組的單元類型對象。 它基本上是一個< 1xn cell>數組,每個單元格是一個雙精度數組。MATLAB:從MATLAB到Java獲取單元陣列
我想要做的是以某種方式導出這些數據,以便我可以將數據作爲int類型的數組的不規則數組插入到Java中。任何想法如何最好地做到這一點?
我有一個在MATLAB中創建的數組,其中包含許多包含雙精度數組的單元類型對象。 它基本上是一個< 1xn cell>數組,每個單元格是一個雙精度數組。MATLAB:從MATLAB到Java獲取單元陣列
我想要做的是以某種方式導出這些數據,以便我可以將數據作爲int類型的數組的不規則數組插入到Java中。任何想法如何最好地做到這一點?
這是很難建立在Matlab原語的Java數組,因爲Matlab的希望autobox它放回一個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內部INT [] [],因爲Matlab的拆箱會以Java int [] []回Matlab的陣列。將其保存爲M代碼中的Object []可以保護它。
您也可以使用類似的包裝來構建List或其他Collection。這可能會與其他Java代碼更好地匹配,並且Collections不會在Matlab中取消裝箱。
您可以從MATLAB調用Java。做一個谷歌搜索Java和MATLAB。這看起來像一個很好的網站給你: http://math.carleton.ca/old/help/matlab/MathWorks_R13Doc/techdoc/matlab_external/ch_java.html
嗯,我想從Java的工作,而不是MATLAB所以我所做的是我改編自西爾萬·費德勒cell2cvs代碼,並得到這個做它得到太陽能電池陣列工作並生成一個txt文件。
function cell2txt(datName,cellArray)
% Writes cell array content into a *.txt file.
%
% CELL2CSV(datName,cellArray,seperator,excelVersion)
%
% datName = Name of the file to save. [ i.e. 'text.csv' ]
% cellarray = Name of the Cell Array where the data is in
%
% by Sylvain Fiedler, KA, 2004
% updated by Sylvain Fiedler, Metz, 06
% fixed the logical-bug, Kaiserslautern, 06/2008, S.Fiedler
seperator1 = ',';
seperator2 = '\n';
datei = fopen(datName,'w');
for z=1:size(cellArray,1)
for s=1:size(cellArray,2)
var = eval(['cellArray{z,s}']);
if size(var,1) == 0
var = '';
end
if isnumeric(var) == 1
var = num2str(var);
%fprintf(datei,seperator1);
end
fprintf(datei,var);
if s ~= size(cellArray,2)
fprintf(datei,seperator2);
end
end
end
fclose(datei);
的後續問題here
如果我有時間回到你身邊,我會在週末試試這個 – Bar 2009-11-21 12:06:10