How to gracefully truncate a matrix of unknown dimensions?
2 次查看(过去 30 天)
显示 更早的评论
Suppose here comes a
function Truncated=MatrixTruncate(Input,Dimension,a,b)
Input is a matrix, whose dimension is unknown and depends on the caller. This function will truncate the matrix along the dimension Dimension, from index a to b. Now I use eval to generate code at runtime:
Truncated=eval(['Input(' repmat(':,',1,Dimension-1) num2str(a) ':' num2str(b) repmat(',:',1,ndims(Input)-Dimension) ')']);
Personally I feel the code somewhat unnatural, though it did work. Are there any more graceful solutions?
0 个评论
回答(1 个)
Bruno Luong
2019-7-13
编辑:Bruno Luong
2019-7-13
Input = rand(3,4,5)
Dimension = 2;
a=2; b=4;
commaidx = cell(size(size(Input)));
commaidx(:) = {':'};
commaidx{Dimension} = a:b;
Truncated = Input(commaidx{:})
7 个评论
Tmfu Vh
2019-7-14
Splendid solution. What if I want to use the "end" index here?
commaidx{Dimension} = a:end;
This code is not allowed.
Bruno Luong
2019-7-14
No you can't use 'end' in commalist, you have to replace it with
size(Input,Dimension)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!