How do you crop a Matrix?

32 次查看(过去 30 天)
zephyr21
zephyr21 2016-6-24
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?

回答(2 个)

Jos (10584)
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)

dpb
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
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
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 CenterFile Exchange 中查找有关 Encryption / Cryptography 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by