MATLAB Answers

Find series of maxima of array (and matrix) within blocks of size n

1 ビュー (過去 30 日間)
Erez
Erez 2019 年 8 月 30 日
コメント済み: Erez 2019 年 8 月 30 日
I have a simple problem, and it's, perhaps, less simple extension:
  1. 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 件のコメント

Sign in to comment.

採用された回答

Ted Shultz
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 件のコメント

Erez
Erez 2019 年 8 月 30 日
Thanks a lot!

Sign in to comment.

その他の回答 (1 件)

Bruno Luong
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)

  1 件のコメント

Erez
Erez 2019 年 8 月 30 日
Awsome solution! I can't formally accept two solutions on this website, so I'll "accept" the first (arbitrarily). But this solution of yours works just as great. Thanks!

Sign in to comment.


Translated by