Split array into groups of close numbers

5 次查看(过去 30 天)
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 个评论
Dyuman Joshi
Dyuman Joshi 2023-12-8
How do you define close numbers?
Where the difference between adjacent numbers in 1?

请先登录,再进行评论。

采纳的回答

Stephen23
Stephen23 2023-12-8
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}

更多回答(1 个)

Walter Roberson
Walter Roberson 2023-12-8
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

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

标签

产品


版本

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by