Split array into groups of close numbers

6 Ansichten (letzte 30 Tage)
Denis Perotto
Denis Perotto am 8 Dez. 2023
Beantwortet: Stephen23 am 8 Dez. 2023
Greetings,
Is there a built-in function in MATLAB to split an 1D array into groups of close numbers?
For example, I have an array
a = [1 2 3 10 11]
and want to split it into N = 2 groups. I expect to see something like
result{1} = [1 2 3]
result{2} = [10 11]
  1 Kommentar
Dyuman Joshi
Dyuman Joshi am 8 Dez. 2023
How do you define close numbers?
Where the difference between adjacent numbers in 1?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 8 Dez. 2023
a = [1,2,3,10,11];
n = 2;
x = kmeans(a(:),n)
x = 5×1
2 2 2 1 1
c = accumarray(x,a(:),[],@(a){a})
c = 2×1 cell array
{2×1 double} {3×1 double}

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 8 Dez. 2023
No -- because there is no rigourous meaning to what "close" means.
For example, in [1 3 5 7], surely 1 is not "close" to 7, but 5 is (probably) close to 7. Then 3 is "close" to 5, and 1 is "close" to 3. So are they all to be considered close as a group, even though 1 is "far" from 7 ?
Now, if the question were about dividing up into groups of consecutive values, then that would not be too difficult.
You could also use something like
N = 2;
a = [1 2 3 10 11]
a = 1×5
1 2 3 10 11
[g, centroids] = kmeans(a(:), N)
g = 5×1
1 1 1 2 2
centroids = 2×1
2.0000 10.5000

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by