کلیدستان

نسخه‌ی کامل: بررسی ستون های یک ماتریس
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
با سلاماز برنامه متلب سوالی دارم :فرض کنید یک ماتریس n*n داریم که درآیه های آن اعداد 0 یا 1 هستند.می خواهیم شماره ستون هایی که در آنها درآیه ها همه 0 هستند و یا 90% آنها 0 هستند را دربیاوریم.چگونه می شود؟در دو حالت : 1- همه درآیه ها صفر اند                  2- مثلا 95% آنها صفر هستند.ممنون می شوم اگر جواب بدهید.
کد:
clc;
close all;
m=input('please input your matrix:');
[s1,s2]=size(m);
b=[];
for i=1:s2
nz=nnz(m(:,i));
s=((s1-nz)*100)/s1;
if nz==0
b=[b i];
else if s>=90
b=[b i];
end
end
end
b

کد بالا ماتریس ورودی را از شما میپرسد و سپس خروجی ماتریس b را به شما میدهد  که شماره ستونهایی است که یا همگی صفر هستند یا بالاتر از 90 درصد درایه های آن ستون صفر میباشند. مثالی میزنیم :

کد:
please input your matrix:[0,0,0,0;0,0,1,0;0,0,0,0;0,0,0,0;0,0,0,0;0,0,0,0;0,0,0,0;0,0,0,0;2,3,4,0;0,0,0,0]

که ماتریس فوق به صورت زیر است :

کد:
>> m
m =
0 0 0 0
0 0 1 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
2 3 4 0
0 0 0 0

ماتریس خروجی b به صورت زیر است :

کد:
b = 1 2 4
از جواب شما ممنونم.
خوشبختانه خودم هم به یک کد دیگر رسیدم.
اگر خواستید بگید براتون بفرستم.
یا علی
مجدد ممنونم.
با سلام مجدد.
در صورتی که بخواهیم این ستون ها را جدا کرده و بصورت مجزا در ماتریس های دیگری بگذاریم چطور می شود؟
یعنی به عبارت دیگر اعضای b را چگونه می شود فراخوانی کرد؟
با توجه به اینکه ماتریس ورودی در متغیر m ذخیره میشود و متغیر b شماره ستون است بنابراین میتوانیم هر یک از ستونها را به صورت زیر استخراج کنیم:

کد:
for i=1:length(b)
n(:,i)=m(:,b(i));
end
n

که ماتریس خروجی n شامل ستونهای معرفی شده در ماتریس b است.