# مباحث متفرقه برنامه نویسی > برنامه نویسی Matlab >  حذف سلولهای تکراری از یک ماتریس سلولی

## mehdi5106

در فایل پیوستی که ماتریس 8*8 وجود دارد که تعدادی از سلولها دارای آرایه هایی با بازه های یکسان از اعداد هستند. دوستان می تونند راهنمایی کنند ، چطوری بازه های تکراری از ماتریس فوق حذف شوند.

مثلا سلولهای 1,1 و 1,2 هر دو دارای بازه های 1 تا 27 و تکراری می باشند.
دقت کنید که ابعاد سلولها مساوی نمی باشد. اگر برابر بود ، می شد یک کاری کرد. اما در این حالتش ...

----------


## rahnema1

اگر می خواهید آرایه سلولی 8*8 داشته باشید که سلولهای تکراری آن به صورت آرایه های خالی باشند بدین ترتیب عمل کنید

nn1=reshape(nodeDist,1,prod(size(nodeDist)))
dex=1:prod(size(nodeDist));
j=1;
i=2;
sz=prod(size(dex))
while(j<sz)
while (i<=sz)
if(issame(nn1(dex(j)),nn1(dex(i))))
nn1{dex(i)}=[];
dex(i)=[];
sz=prod(size(dex));
else
i=i+1;
end
end
j=j+1;
end
nn1=reshape(nn1,size(nodeDist));

اگر می خواهید عناصر تکراری به کلی حذف شوند بایستی از حالت ماتریس 8*8 خارج شود و به صورت یک آرایه یک بعدی در بیاید بدین صورت:


nn2=reshape(nodeDist,1,prod(size(nodeDist)));
j=1;
i=2;
sz=prod(size(nn2));
while(j<sz)
while (i<=sz)
if(issame(nn2(j),nn2(i)))
nn2(i)=[];
sz=prod(size(nn2));
else
i=i+1;
end
end
j=j+1;
end

----------


## mehdi5106

اگر همزمان بخوام که اگر طول سلولی از یه حدی بزرگتر شد نیز حذف بشه ، این کد رو چه جوری تغییرش بدم.
C(cellfun('size',C,2)>10)=[];

----------


## Imaaan

> اگر همزمان بخوام که اگر طول سلولی از یه حدی بزرگتر شد نیز حذف بشه ، این کد رو چه جوری تغییرش بدم.
> C(cellfun('size',C,2)>10)=[];


سلام

clear;
C = {rand(1,7),randn(1,11),randi(100,1,10),1:9,1:.1:2}
C(cellfun('length',C)>10)=[]
% C(cellfun(@(x) size(x,2),C)>10)=[]

----------


## rahnema1

اگه بخواهید عنصر حذف نشه و به جایش یک آرایه خالی باشه اینجوری:


function res=y(x);if(length(x)>10);res=[];else res=x;end;end;
c=cellfun(@y, nodeDist,'UniformOutput' , false);

----------

