Find series of maxima of array (and matrix) within blocks of size n
1 回表示 (過去 30 日間)
古いコメントを表示
I have a simple problem, and it's, perhaps, less simple extension:
- I have an array A=[1 2 5 1 0 0 5 0 1 2 4 0 5 3 2 0 1 0 0 5] (all positive). How do I produce a vector B, which contains the maxima of, say, blocks of n=5 within A?
Namely, I want to produce B=[5 5 5 5].
2. I have a matrix: A=[1 2 5 1 0 0 5 0 1 2 4 0 5 3 2 0 1 0 0 5; 1 2 5 1 0 0 7 0 1 2 4 0 7 3 2 0 1 0 0 5; 1 2 5 1 0 0 5 0 1 2 4 0 5 3 2 0 1 0 0 5;] . Now, I want to get the matrix: C=[5 5 5 5; 5 7 7 5; 5 5 5 5] .
Can these two tasks be achomplished with a single procedure, without using loops?
Thanks!
0 件のコメント
採用された回答
Ted Shultz
2019 年 8 月 30 日
編集済み: Ted Shultz
2019 年 8 月 30 日
You could use rehsape and max:
[reshape(max(reshape(A',5,[])), [], size(A,1))]'
Test:
A=[1 2 5 1 0 0 5 0 1 2 4 0 5 3 2 0 1 0 0 5]
[reshape(max(reshape(A',5,[])), [], size(A,1))]'
A=[1 2 5 1 0 0 5 0 1 2 4 0 5 3 2 0 1 0 0 5; 1 2 5 1 0 0 7 0 1 2 4 0 7 3 2 0 1 0 0 5; 1 2 5 1 0 0 5 0 1 2 4 0 5 3 2 0 1 0 0 5;]
[reshape(max(reshape(A',5,[])), [], size(A,1))]'
ans =
5 5 5 5
ans =
5 5 5 5
5 7 7 5
5 5 5 5
その他の回答 (1 件)
Bruno Luong
2019 年 8 月 30 日
編集済み: Bruno Luong
2019 年 8 月 30 日
maxfun = @(A) squeeze(max(reshape(A,size(A,1),5,[]),[],2));
A = [1 2 5 1 0 0 5 0 1 2 4 0 5 3 2 0 1 0 0 5]
B = maxfun(A)
A = [1 2 5 1 0 0 5 0 1 2 4 0 5 3 2 0 1 0 0 5; 1 2 5 1 0 0 7 0 1 2 4 0 7 3 2 0 1 0 0 5; 1 2 5 1 0 0 5 0 1 2 4 0 5 3 2 0 1 0 0 5]
C = maxfun(A)
参考
カテゴリ
Help Center および File Exchange で Multidimensional Arrays についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!