我在matlab 2015b中使用库编译器编译了matlab函数,我怀疑pca函数是异常的来源,因为我已经做了一个简单的添加函数并且执行没有任何问题,我该如何执行pca函数? ?
Matlab功能:
function [ COEFF,SCORE,latent] = ACP( path )
Data = fileread(path);
Data = strrep(Data, ',', '.');
FID = fopen('comma2pointData.txt', 'w');
fwrite(FID, Data, 'char');
fclose(FID);
Data=importdata('comma2pointData.txt','\t');
[COEFF,SCORE,latent] = pca(Data);
end
Java代码:
String path = "/Desktop/datamicro.txt";
Object[] result = null;
acpClass acp = null;
try {
acp = new acpClass();
result=acp.ACP(3, path);
} catch (MWException ex) {
Logger.getLogger(CalculAcpFrame.class.getName()).log(Level.SEVERE, null, ex);
} finally {
MWArray.disposeArray(result);
acp.dispose();
}
datamicro.txt
0,25 0,16 0,95 0,53 0,22 1,17 549,00
0,20 0,06 0,39 0,62 0,18 1,09 293,25
0,16 0,05 0,31 0,39 0,14 0,78 935,00
0,19 0,06 0,40 0,62 0,23 1,14 380,00
例外:
Caught "std::exception" Exception message is:
Timed out waiting for Thread to Process
avr. 06, 2017 11:59:57 PM microarchi_proj.Microarchi_proj main
GRAVE: null
... Matlab M-code Stack Trace ...
com.mathworks.toolbox.javabuilder.MWException: Timed out waiting for Thread to Process
at com.mathworks.toolbox.javabuilder.internal.MWMCR.mclFeval(Native Method)
at com.mathworks.toolbox.javabuilder.internal.MWMCR.access$600(MWMCR.java:31)
at com.mathworks.toolbox.javabuilder.internal.MWMCR$6.mclFeval(MWMCR.java:861)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.mathworks.toolbox.javabuilder.internal.MWMCR$5.invoke(MWMCR.java:759)
at com.sun.proxy.$Proxy0.mclFeval(Unknown Source)
at com.mathworks.toolbox.javabuilder.internal.MWMCR.invoke(MWMCR.java:427)
at ACPFunction.acpClass.ACP(acpClass.java:210)
at microarchi_proj.Microarchi_proj.main(Microarchi_proj.java:1145)
答案 0 :(得分:0)
<强>编辑:强>
提供数据后,代码已经过编辑以适应数据格式化。
编辑后的代码是:
function [ COEFF,SCORE,latent] = ACP(path)
%% Reading file as a string
Data = fileread(path);
%% Converting comma decimal to point decimal values
Data = strrep(Data, ',', '.');
%% writing point decimal values to new file
FID = fopen('comma2pointData.txt', 'w');
fwrite(FID, Data, 'char');
fclose(FID);
% Delete unwanted variables
clear Data FID
%% Reading new file
nData=importdata('comma2pointData.txt','\t');
% determin rows and columns
rows = length(nData);
[~,columns] = size(strsplit(nData{1},' '));
b = zeros(rows,columns);
%
for row = 1:rows
line = nData{row};
a = strsplit(line,' ');
b(row,:)=cellfun(@str2num,a);
end
% Delete unwanted variables
clear nData a line row rows columns
%% Calling pca function
[COEFF,SCORE,latent] = pca(b);
% Delete unwanted variables
clear b
% End of Function
end
我希望它能解决你的问题。