راستی ، این فقط ماتریس آخری که با 43 تا ستون داره رو ایجاد میکنه. پس ماتریس هایی با ستونهای 5 و 10 و 15 و 20 و .... چی؟
فکر کنم باید اندیس براش گذاشته بشه. درسته؟ چون اینطوری فقط آخرین ماتریس a,b رو نشون میده!
راستی ، این فقط ماتریس آخری که با 43 تا ستون داره رو ایجاد میکنه. پس ماتریس هایی با ستونهای 5 و 10 و 15 و 20 و .... چی؟
فکر کنم باید اندیس براش گذاشته بشه. درسته؟ چون اینطوری فقط آخرین ماتریس a,b رو نشون میده!
یه اشتباهی در کد بالا شد که درست کردم
اینکه در حلقه for مقادیر قبلی چه طور میشن بستگی به استفاده شما داره
اما اگه می خواهید ذخیره کنید میتونید در سلول ذخیره کنید مثل این:
k=0;
function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X))(1:ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end
celldata={}
j=1
X=rand(163,43);
for i=[5:5:35,43]
[a,b]=myfun(X,i);
celldata{j}={a,b};
j=j+1;
end
مقادیر هم یکتا هستند و مشکلی نیست
به این صورت جدا کردم :
myfun:
function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X))(1:ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end
و برنامه randmat :
celldata={}
j=1
X=rand(163,43);
for i=[5:5:35,43]
[a,b]=myfun(X,i);
celldata{j}={a,b};
j=j+1;
end
اجرا که میکنم این پیغام رو میده :
??? Error: File: myfun.m Line: 5 Column: 12
()-indexing must appear last in an index expression.
Error in ==> randmat at 5
[a,b]=myfun(X,i);
متغیر k اشتباه گذاشته بودم
این را امتحان کنید
function [a,b]= myfun(X,ncols)
cols=@(xx) size(xx,2);
i0=0;i1=0;
while( numel(i1)~=163)
i0=randperm(cols(X));
i0=i0(1:ncols);
[ii,i1,jj]=unique(X(:,i0),'rows');
end
i2=randperm(163);
a=X(i2(1:98),i0);
b=X(i2(99:163),i0);
end
مرسی. اجرا شد فعلاً
حال من اگه بخوام ماتریس a از dataset2 رو فراخونی کنم باید چیکار کنم؟
چون این یه قسمتی از برنامه ی من هست و باید برنامه ای که با anfis نوشتم رو توی این حلقه ی for قرار بدم.
به این صورت که dataset1 رو ببره توی anfis بعنوان ماتریس های آموزش و تست اجرا کنه. بعد dataset2 رو ببره توی anfis احرا کنه و الی آخر.
آیا اینکار رو انجام میده؟
اصلا لازم نبود a,b را در سلول ذخیره کنید توی همون حلقه for ازش استفاده می کردید
در هر صورت برای استخراج a و b از داخل سلول این را بنویسید
for i=1:numel(celldata)
a=celldata{i}{1}
b=celldata{i}{2}
end