I have a matrix of numeric entries and wish to convert each entry above a specified threshold to one and all other entries to zero. This has to be an elegant way to do this without a "for" loop. Perhaps using the "find" command in some manner?

1 件のコメント

Paul Fishback
Paul Fishback 2015 年 1 月 29 日
Never mind... Forgot I can apply the floor function to a matrix.

サインインしてコメントする。

 採用された回答

Star Strider
Star Strider 2015 年 1 月 29 日

3 投票

There are likely a number of ways.
One approach:
M = magic(6);
Mm = mean(M(:));
M(M>Mm) = 1;
M(M~=1) = 0;
It sets all the entries greater than the mean to 1, and then uses that result to set the rest to 0.

4 件のコメント

Image Analyst
Image Analyst 2015 年 1 月 29 日
編集済み: Image Analyst 2015 年 1 月 29 日
Or, instead of the last 3 lines:
M = M > someThreshold;
Tamir Eisenstein
Tamir Eisenstein 2020 年 3 月 6 日
What if my threshold is not a specific number but a percentile? for example, set the top 20% values to 1 and the rest to 0.
Star Strider
Star Strider 2020 年 3 月 7 日
@Tamir Eisenstein —
M = randi(99, 10); % Create Matrix
Msort = sort(M(:),'descend'); % Sorted Vector
Threshold = Msort(fix(numel(M)*0.2)); % Find Top 20% Value
Out = zeros(size(M))~=0; % Create Logical Matrix
Out(M >= Threshold) = 1; % Desired Result
Zakaria Abdelli
Zakaria Abdelli 2022 年 10 月 21 日
編集済み: Zakaria Abdelli 2022 年 10 月 21 日
how do i do it with 3 and others 0 can you give me a hint pleas im just a newbee???

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by