How do you crop a Matrix?
103 次查看(过去 30 天)
显示 更早的评论
I have a 770x770 matrix that I want to cut down to a 324x324 matrix. How would I cut off the bottom 446 rows and rightmost 446 columns?
0 个评论
回答(2 个)
Jos (10584)
2017-12-1
You mean the number of dimensions of M is unknown, but Nkeep is known? Use subsref:
M = randi(10,4,3,4,5) ; % arbitrary dimensions
Nkeep = 2
S = struct('type','()','subs',{repmat({[1:Nkeep]},1,ndims(M))})
M2 = subsref(M, S)
0 个评论
dpb
2016-6-24
编辑:dpb
2016-6-24
Pretty simply, just save what you want...
Nkeep=324; % size to keep
M=M(1:Nkeep,1:Nkeep);
You can, of course, set the unwanted rows, columns = [], but that takes two steps instead of just one:
M(:,Nkeep+1:end)=[]; % columns for all rows, result is rectangular
M(Nkeep+1:end,:)=[]; % now the rows for remaining columns, result is square now
2 个评论
Jurgen
2017-11-30
How do you generalize this for N dimensional matrices, assuming unknown or large matrix ndims? The only thing I can think of involves eval.
dpb
2017-12-1
Not much support for templates and the like in procedural code...you might be able to get creative with sub2ind and friends, but likely if it is truly amorphic data sizes/shapes that must be handled it's likely to come down to eval at the bitter end, agreed.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!