How do you crop a Matrix?
98 ビュー (過去 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!