PDA

View Full Version : حذف سلولهای تکراری از یک ماتریس سلولی



mehdi5106
سه شنبه 16 مهر 1392, 05:57 صبح
در فایل پیوستی که ماتریس 8*8 وجود دارد که تعدادی از سلولها دارای آرایه هایی با بازه های یکسان از اعداد هستند. دوستان می تونند راهنمایی کنند ، چطوری بازه های تکراری از ماتریس فوق حذف شوند.

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

rahnema1
سه شنبه 16 مهر 1392, 09:54 صبح
اگر می خواهید آرایه سلولی 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
چهارشنبه 17 مهر 1392, 07:21 صبح
اگر همزمان بخوام که اگر طول سلولی از یه حدی بزرگتر شد نیز حذف بشه ، این کد رو چه جوری تغییرش بدم.

C(cellfun('size',C,2)>10)=[];

Imaaan
چهارشنبه 17 مهر 1392, 09:43 صبح
اگر همزمان بخوام که اگر طول سلولی از یه حدی بزرگتر شد نیز حذف بشه ، این کد رو چه جوری تغییرش بدم.

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
چهارشنبه 17 مهر 1392, 10:14 صبح
اگه بخواهید عنصر حذف نشه و به جایش یک آرایه خالی باشه اینجوری:



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