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!