若X是一个 256 X 256 矩阵,请编写一个函数,要求格式为 Y=function_name(X, n),其中 n 是一个正整数(<=256*256),该函数只保留X矩阵里绝对值最大的 n 个元素,其他元素值设为零,输出到Y矩阵。测定n=500时程序的运行时间提示:参考函数 max 和 sort 等。
用两种方法解决, 高手路过,请留下一臂之力!不胜感激!!!!
以下两个函数分别用sort和max解决。(1)用参考函数sortfunction Y=function_name(X,n) [a,b]=sort(abs(X(:)));%将矩阵X中的所有元素按从小到大排列,a记录数据,b记录数据位置。X(b(1:end-n))=0; Y=X; %将矩阵X中的前end-n个(end代表矩阵X总的元素个数)元素设为0,其他位置的元素值不变。(2)用参考函数maxfunction Y=function_name(X,n) Y=zeros(size(X));%预先给矩阵Y赋一个值(与X同大小的零矩阵)。k=0;while k<n [a,b]=max(abs(X(:))); Y(b)=X(b);X(b)=0; k=k+1;end% 下面是测试:%X=randn(256); tic; Y=function_name(X,500); toc%X=randn(2); tic; Y=function_name(X,3); toc很显然,方法(1)耗时较少,这充分体现了Matlab数组运算的优点。 |
|