How can I leave only the 10 largest elements of a matrix?
7 views (last 30 days)
Show older comments
Jae Min Lee
on 19 Sep 2018
Commented: Walter Roberson
on 19 Sep 2018
I would like to make the remainder of the magnitude matrix zero except for the 10 largest values.
The code is shown below.
while hasFrame(vidReader)
Fr2 = rgb2gray(readFrame(vidReader)); % get second frame
Fr2 = im2double(Fr2);
% compute Vx, Vy by HS
[Vx, Vy] = OpticalFlow(Fr1, Fr2, alpha, N);
m = getMagnitude(Vx, Vy);
Fr1 = Fr2; % Fr2 becomes first frame of next sequence
[rows, cols] = size(m);
end
magnitude matrix = m
0 Comments
Accepted Answer
Walter Roberson
on 19 Sep 2018
Edited: Walter Roberson
on 19 Sep 2018
[vals, index] = sort(m(:), 'descend');
selected_index = index(1:10);
mt = 0 * m; %same size and type but all 0
mt(selected_index) = m(selected_index);
m = mt;
Note: you need to figure out how you want to handle ties.
3 Comments
Steven Lord
on 19 Sep 2018
mt = 0 * m; %same size and type but all 0
This is true unless m contains a nonfinite value.
I'd prefer calling maxk with two output arguments to generate vals and selected_index, filling all of m with 0, then using those maxk outputs to put the maximum values back in place.
More Answers (0)
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!