how to find mode without built-in mode function?
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
any suggestions how to write a function that finds a vectors mode WITHOUT using the built-in mode function?
0 comentarios
Respuestas (3)
the cyclist
el 9 de Jun. de 2013
You could use the hist() function, and use the value that has the highest count.
5 comentarios
the cyclist
el 7 de En. de 2021
I think this is because by default, hist() chooses the bin centers by an algorithm that does not guarantee they are in the original vector. Try this instead:
[counts, centers] = histcounts(YourVector,[unique(YourVector) Inf]);
[~, maxidx] = max(counts);
mode_value = centers(maxidx);
the cyclist
el 7 de En. de 2021
I realized that that code will not find all the modes, if there are multiple. This code should:
[counts, centers] = histcounts(YourVector,[unique(YourVector) Inf]);
max_value = max(counts);
max_idx = (counts==max_value);
mode_values = centers(max_idx)
Walter Roberson
el 9 de Jun. de 2013
unique(), take the third output, put it through accumarray(), find the max()
0 comentarios
Roger Stafford
el 9 de Jun. de 2013
Editada: Roger Stafford
el 9 de Jun. de 2013
If you are not allowed to use the 'mode' function, it sounds as though you must use only more primitive functions. Are you allowed to do the following with v as the given column vector?
u = sort(v);
f = find([true;diff(u)~=0;true]);
[~,ix] = max(diff(f));
m = u(f(ix)); % m is most frequent value occurring in v
(Corrected)
5 comentarios
Rik
el 6 de En. de 2021
That depends on the dimensions of v. If it is a column vector this runs without error.
v = [9;4;2;4;9;2;4];
u = sort(v);
[true;diff(u)~=0;true]
v = [9;4;2;4;9;2;4];
v = v.';
u = sort(v);
[true;diff(u)~=0;true]
Louise Wade
el 7 de En. de 2021
Editada: Louise Wade
el 7 de En. de 2021
I'll try and transpose my row vector into a column vector and try again. If there are multiple values as the mode, would this cause an issue?
EDIT: It seems to be working for me. Thank you so much for helping. All I needed to do was transpose the array.
Ver también
Categorías
Más información sobre Creating, Deleting, and Querying Graphics Objects en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!