# Split array according to one column values

조회 수: 105(최근 30일)
Rui Carapinha 2018년 7월 25일
댓글: Stephen23 2018년 7월 25일
I have an array like this:
A = {10 1 1; 10 1 2; 10 1 1; 10 2 1; 10 1 3; 10 2 4; 10 2 5}
I want to split into arrays based on the second column value. The output should look like this:
B = {10 1 1; 10 1 2; 10 1 1; 10 1 3}
C = {10 2 1; 10 2 4; 10 2 5}
How can I do this ?

댓글을 달려면 로그인하십시오.

### 답변(3개)

Stephen23 2018년 7월 25일
편집: Stephen23 2018년 7월 25일
Your life would be much easier if you stored numeric data in numeric arrays:
>> A = [10 1 1; 10 1 2; 10 1 1; 10 2 1; 10 1 3; 10 2 4; 10 2 5]
A =
10 1 1
10 1 2
10 1 1
10 2 1
10 1 3
10 2 4
10 2 5
>> B = A(A(:,2)==1,:)
B =
10 1 1
10 1 2
10 1 1
10 1 3
>> C = A(A(:,2)==2,:)
C =
10 2 1
10 2 4
10 2 5
##### 댓글 수: 2표시숨기기 이전 댓글 수: 1
Stephen23 2018년 7월 25일
@Rui Carapinha: there are several approaches. Here is one simple solution using unique and arrayfun:
>> A = [10,1,1;10,1,2;10,1,1;10,2,1;10,1,3;10,2,4;10,2,5]
A =
10 1 1
10 1 2
10 1 1
10 2 1
10 1 3
10 2 4
10 2 5
>> U = unique(A(:,2));
>> C = arrayfun(@(n)A(A(:,2)==n,:),U,'uni',0);
>> C{:}
ans =
10 1 1
10 1 2
10 1 1
10 1 3
ans =
10 2 1
10 2 4
10 2 5

댓글을 달려면 로그인하십시오.

LuKr 2018년 7월 25일
B=A(cellfun(@(x) isequal(1,x),{A{:,2}}),:)
C=A(cellfun(@(x) isequal(2,x),{A{:,2}}),:)
Maybe like this?
##### 댓글 수: 0표시숨기기 이전 댓글 수: -1

댓글을 달려면 로그인하십시오.

Hermes Suen 2018년 7월 25일
You should be able to do this through logical indexing, and it may be easier if it was not a cell array but a normal numerical array. Define the matrix as such, without the curly braces:
A = [10 1 1; 10 1 2; 10 1 1; 10 2 1; 10 1 3; 10 2 4; 10 2 5];
Then store the second column into a separate variable:
cols = A(:,2);
This takes the second column of the A matrix and stores it into a column vector called "cols". From there you can use logical indexing as follows:
ones = cols ==1;
twos = cols ==2;
The output of the above two commands should be this:
ones =
7×1 logical array
1
1
1
0
1
0
0
"Ones" will have a "1" whenever the column vector has a "1" and has a "0" whenever the column vector has anything other than a 1. The same logic then applies to the variable "twos"
From here you can then call the following two commands to get what you are looking for:
B = A(ones,:)
C = A(twos,:)
This is logical indexing, a neat feature of MATLAB, let me know if you need further clarification or if you have any questions!

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

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

Start Hunting!