How to split array into sub arrays?

25 Ansichten (letzte 30 Tage)
benghenia aek
benghenia aek am 30 Jan. 2024
Bearbeitet: Matt J am 19 Feb. 2024
how to split principal vector "a" into sub vectors a1, a2, a3 and a4
exemple:
a=[1 3 5 8 11 12 15 17 18 19 20 21 24 29 31 32 33 34 35 36 38 39];
a1=[1 3 5 8];
a2=[11 12 15 17 18 19 20];
a3=[21 24 29];
a4=[31 32 33 34 35 36 38 39];
thnkx
  3 Kommentare
benghenia aek
benghenia aek am 30 Jan. 2024
I want to split the big array "a" into:
a1 "the numbers between 0 and 10"
a2 "the numbers between 11 and 20"
a3 "the numbers between 21 and 30"
and make it into cell arrays
Dyuman Joshi
Dyuman Joshi am 19 Feb. 2024
Any updates, @benghenia aek?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Dyuman Joshi
Dyuman Joshi am 30 Jan. 2024
Bearbeitet: Dyuman Joshi am 19 Feb. 2024
a = [1 3 5 8 11 12 15 17 18 19 20 21 24 29 31 32 33 34 35 36 38 39 69].';
%bin the data into groups of 10
k = findgroups(floor((a-1)/10));
z = accumarray(k, a, [], @(x) {x.'})
z = 5×1 cell array
{[ 1 3 5 8]} {[ 11 12 15 17 18 19 20]} {[ 21 24 29]} {[31 32 33 34 35 36 38 39]} {[ 69]}

Weitere Antworten (1)

Matt J
Matt J am 30 Jan. 2024
Bearbeitet: Matt J am 19 Feb. 2024
a = [1 3 5 8 11 12 15 17 18 19 20 21 24 29 31 32 33 34 35 36 38 39];
G=findgroups(discretize(a,[0:10:max(a)+10],'Include','right'));
z=splitapply(@(x){x}, a, G)
z = 1x4 cell array
{[1 3 5 8]} {[11 12 15 17 18 19 20]} {[21 24 29]} {[31 32 33 34 35 36 38 39]}
  2 Kommentare
Dyuman Joshi
Dyuman Joshi am 19 Feb. 2024
splitapply() won't work if there is a gap in the data -
a = [1 3 5 8 11 12 15 17 18 19 20 21 24 29 31 32 33 34 35 36 38 39 69];
G=discretize(a,[0:10:max(a)+10],'Include','right');
z=splitapply(@(x){x}, a, G)
Error using splitapply
For N groups, every integer between 1 and N must occur at least once in the vector of group numbers.
Matt J
Matt J am 19 Feb. 2024
Small modification,
a = [1 3 5 8 11 12 15 17 18 19 20 21 24 29 31 32 33 34 35 36 38 39 69];
G=findgroups(discretize(a,[0:10:max(a)+10],'Include','right'));
z=splitapply(@(x){x}, a, G)
z = 1x5 cell array
{[1 3 5 8]} {[11 12 15 17 18 19 20]} {[21 24 29]} {[31 32 33 34 35 36 38 39]} {[69]}

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by