How to save the several results of a program in an array?

조회 수: 1 (최근 30일)
phdcomputer Eng
phdcomputer Eng 2019년 12월 23일
편집: phdcomputer Eng 2019년 12월 28일
clc;
clear;
close all;
tic
load colon.mat
data=colon;
[n,m]=size(data);
%%
%supervised
d=10;
l=1;
t=1;
for i=1:n
if data(i,m)==0
data(i,m)=2;
end
end
data1=[];
data2=[];
for i=1:n
if data(i,m)==1
data1(l,:)=data(i,1:m-1);
l=l+1;
else
data2(t,:)=data(i,1:m-1);
t=t+1;
end
end
if t>l
data1(l:t-1,1:m-1)=0;
else
data2(t:l-1,1:m-1)=0;
end
%computing Distance measures
for i=1: m-1
thisCol1=data1(:,i);
thisCol2=data2(:,i);
a6(i)=fTonimotoDist(thisCol1,thisCol2);
end
%sorting the distances
[A6,indA6]=sort(a6,'descend'); %Tonimoto
%selecting Threshold
datas6=data(:,indA6(1:d));
data6=[datas6 data(:,m)];
%%data6 classify%%tanimoto
[n,m]=size(data6);
for k=1:it
test=data6(test_rows,:);
train=data6(train_rows,:);
xtest=test(:,1:m-1);
ytest=test(:,m);
xtrain=train(:,1:m-1);
ytrain=train(:,m);
[rforest, DT , sk ] = classificationa(xtest,xtrain,ytrain);
[Arforest6(k), ADT6(k) , Ask6(k)] = allaccuracydata(rforest, DT , sk , ytest);
end
averf6=mean(Arforest6);
avedt6=mean(ADT6);
avesk6=mean(Ask6);
x6=[averf6, avedt6 , avesk6];
disp('tanimoto'); disp(x6);
In this code d is the number of selected features(columns) so we use 10 features of the data(colon attached) to classify It, my question is suppose that we want to obtain the average of Arforest (averf6) once for d=10, once for d=20,for d=30,d=40 and d=50 and save the results of averf6 for each of them in one array(forexample a) to plot the array.
how can I save the results of these different runing the program, in one array based on changing in d [10 20 30 40 50], I have problem in this part, and also how to define d that have several values, should I define d as an array forexample d=[10,20,30,40,50]; ?
Thanks

채택된 답변

Stephen23
Stephen23 2019년 12월 23일
편집: Stephen23 2019년 12월 23일
Assuming that those means are scalar values, then a simple loop:
dV = [10,20,30,40,50];
nV = numel(dV);
averf6 = nan(1,nV);
avedt6 = nan(1,nV);
avesk6 = nan(1,nV);
for jj = 1:nV
d = dV(jj);
... your code
averf6(jj) = mean(...)
avedt6(jj) = mean(...)
avesk6(jj) = mean(...)
end
  댓글 수: 8
phdcomputer Eng
phdcomputer Eng 2019년 12월 23일
sorry, I don't know how to indent the codes well I use the code part , sure I use ctrl+i to indent the codes.I hope that the structue will be better. I used these codes based on your advices but still the results are NaN
clc;
clear;
close all;
tic
load colon.mat
data=colon;
[n,m]=size(data);
%%
%supervised
it=10;
dV = [10,20,30,40,50];
nV = numel(dV);
arf66=nan(nV,it);
adt66=nan(nV,it);
ask66=nan(nV,it);
l=1;
t=1;
for i=1:n
if data(i,m)==0
data(i,m)=2;
end
end
data1=[];
data2=[];
for i=1:n
if data(i,m)==1
data1(l,:)=data(i,1:m-1);
l=l+1;
else
data2(t,:)=data(i,1:m-1);
t=t+1;
end
end
if t>l
data1(l:t-1,1:m-1)=0;
else
data2(t:l-1,1:m-1)=0;
end
%computing Distance measures
for i=1: m-1
thisCol1=data1(:,i);
thisCol2=data2(:,i);
a6(i)=fTonimotoDist(thisCol1,thisCol2);
end
% %sorting the distances
[A6,indA6]=sort(a6,'descend'); %Tonimoto
%selecting Threshold
for jj = 1:nV
d = dV(jj);
datas6=data(:,indA6(1:d)); %Tonimoto
data6=[datas6 data(:,m)];
rows=(1:n);
test_count=floor((0.2)*n);
test_rows=randsample(rows,test_count);
train_rows=setdiff(rows,test_rows);
%%data6 classify%%tanimoto
[n,m]=size(data6);
for k=1:it
test=data6(test_rows,:);
train=data6(train_rows,:);
xtest=test(:,1:m-1);
ytest=test(:,m);
xtrain=train(:,1:m-1);
ytrain=train(:,m);
[rforest, DT , sk ] = classificationa(xtest,xtrain,ytrain);
[Arforest6(jj,k), ADT6(jj,k) , Ask6(jj,k)] = allaccuracydata(rforest, DT , sk , ytest);
end
averf6=mean(Arforest6,2);
avedt6=mean(ADT6,2);
avesk6=mean(Ask6,2);
end
x6=[averf6, avedt6 , avesk6];
disp('tanimoto'); disp(x6);
plot(averf6);
plot(avedt6);
plot(avesk6);
Stephen23
Stephen23 2019년 12월 23일
편집: Stephen23 2019년 12월 23일
"...sure I use ctrl+i to indent the codes.I hope that the structue will be better."
Your code has exactly the same indentation as before. I cannot follow it.
Please align your code consistently in the MATLAB editor
  1. select all of the code
  2. press ctrl + i

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

phdcomputer Eng
phdcomputer Eng 2019년 12월 23일
편집: phdcomputer Eng 2019년 12월 23일
@Stephen Cobeldick I attaced the allaccuracydata,classificationa and ftanimotodist functions. Thanks greatly
  댓글 수: 8
Stephen23
Stephen23 2019년 12월 26일
편집: Stephen23 2019년 12월 26일
"should I use these lines in the for k=1:it loop?"
Yes. That is exactly what I showed you. Then you can check what results are generated on each loop iteration, and continue to investigate the iterations that are not generating the results that you expect.
phdcomputer Eng
phdcomputer Eng 2019년 12월 28일
편집: phdcomputer Eng 2019년 12월 28일
@Stephen Cobeldick Thanks greatly, I Edited the codes :
clc;
clear;
close all;
tic
load colon.mat
data=colon;
[n,m]=size(data);
%%
%supervised
it=10;
dV = [10,20,30,40,50];
nV = numel(dV);
Arforest6=nan(nV,it);
Adt6=nan(nV,it);
Ask6=nan(nV,it);
averf6 = nan(nV,1);
avedt6 = nan(nV,1);
avesk6 = nan(nV,1);
l=1;
t=1;
for i=1:n
if data(i,m)==0
data(i,m)=2;
end
end
data1=[];
data2=[];
for i=1:n
if data(i,m)==1
data1(l,:)=data(i,1:m-1);
l=l+1;
else
data2(t,:)=data(i,1:m-1);
t=t+1;
end
end
if t>l
data1(l:t-1,1:m-1)=0;
else
data2(t:l-1,1:m-1)=0;
end
%computing Distance measures
for i=1: m-1
thisCol1=data1(:,i);
thisCol2=data2(:,i);
a6(i)=fTonimotoDist(thisCol1,thisCol2);
end
% %sorting the distances
[A6,indA6]=sort(a6,'descend'); %Tonimoto
%selecting Threshold
for jj = 1:nV
d = dV(jj);
datas6=data(:,indA6(1:d)); %Tonimoto
data6=[datas6 data(:,m)];
rows=(1:n);
test_count=floor((0.2)*n);
test_rows=randsample(rows,test_count);
train_rows=setdiff(rows,test_rows);
%%data6 classify%%tanimoto
[n,m]=size(data6);
for k=1:it
test=data6(test_rows,:);
train=data6(train_rows,:);
xtest=test(:,1:m-1);
ytest=test(:,m);
xtrain=train(:,1:m-1);
ytrain=train(:,m);
disp(k);
[rforest, DT , sk ] = classificationa(xtest,xtrain,ytrain);
[XX, YY , ZZ] = allaccuracydata(rforest, DT , sk , ytest);
Arforest6(jj,k) = XX;
ADT6(jj,k) = YY;
Ask6(jj,k) = ZZ;
end
end
averf6=mean(Arforest6,2);
avedt6=mean(ADT6,2);
avesk6=mean(Ask6,2);
x6=[averf6, avedt6 , avesk6];
disp('tanimoto'); disp(x6);
plot(averf6);
figure
plot(avedt6);
figure
plot(avesk6);
the results of disp(k) is countiong from 1 to 10 five times, In first iteration the XX,YY,ZZ are 0.8333,0.6667, 0.7500 for all the ten outputs, but for next four iterations all the outputs are NaN.
tanimoto
0.8167 0.5833 0.8333
NaN NaN NaN
NaN NaN NaN
NaN NaN NaN
NaN NaN NaN
and the results of plots are empty. It seems the codes are right but the results are NaN.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by