Notice
Recent Posts
Recent Comments
Link
관리 메뉴

뛰는 놈 위에 나는 공대생

[매트랩 MATLAB] 데이터 구조 만들기 본문

프로그래밍 Programming/매트랩 MATLAB

[매트랩 MATLAB] 데이터 구조 만들기

보통의공대생 2021. 1. 29. 14:34

매트랩에서는 작업공간에 다양한 데이터 구조를 저장할 수 있습니다.

구조 안에 또 구조를 만들 수 있었는데, 보는 것은 그렇다치고

직접 구조체(structure)를 만드는 것에 대해서는 마땅히 잘 나온 자료가 없었습니다. (제가 못 찾은 걸 수도...)

 

그래서 이번에 대충 자료구조를 어떻게 만들었는지 정리해볼까 합니다.

 

 

 

1. MATLAB 안에서 사용할 수 있는 데이터 타입

 

Data type 설명
int8 8 bit signed integer $[-2^{7},2^{7}-1]$
uint8 8 bit unsigned integer
int16 16 bit signed integer
uint16 16 bit unsigned integer
int32 32 bit signed integer
uint32 32 bit unsigned integer
int64 64 bit signed integer
uint64 64 bit unsigned integer
single single precision numerical data
double double precision numerical data
logical logical values of 1 or 0, represent true and false respectively
char character data(strings are stored as vector of characters)
cell array array of indexed cells, dimension, data type이 다른 array를 저장 가능
structure C에서 쓰는 structure와 비슷하며, structure는 fields를 가지고 각각에 다른 dimension과 data type의 array를 저장할 수 있음
function handle pointer to a function
user classes objects constructed from a user-defined class
java classes objects constructed from a Java class

 

MATLAB에서 나온 데이터형에는

숫자형, 문자형(+string형), 날짜/시간, categorical형 배열, 테이블, 타임테이블, 구조체, 셀형 배열, 함수 핸들, 맵 컨테이너, 시계열, 데이터형 식별

이 있습니다. 위의 표는 그 중에서도 대표적인 것들을 적어놓았습니다.

(각 데이터에 대해서 궁금하면 : kr.mathworks.com/help/matlab/data-types.html)

 

 

제가 주목할 부분은, structure와 cell array입니다. 다른 data들을 보다보면, structure와 cell array를 쓰는 경우가 많아서 입니다. 그 데이터들을 이용해서 새로운 structure나 cell array를 만들고 싶을 때가 있습니다.

 

vector, matrix 등은 array의 종류입니다. vector는 1-dimensional array, matrix는 2-dimensional array입니다.

 

 

2. struct 만들기

 

matlab에서도 좋은 manual들이 많으니 이 글에서 부족한 부분은 mathworks 사이트에서 얻어가시면 좋을 것 같습니다.

 

kr.mathworks.com/help/matlab/matlab_prog/ways-to-organize-data-in-structure-arrays.html?searchHighlight=Organizing%20Data%20in%20Structure%20Arrays&s_tid=srchtitle

 

구조체형 배열의 데이터를 구성하는 방법 - MATLAB & Simulink - MathWorks 한국

다음 MATLAB 명령에 해당하는 링크를 클릭했습니다. 명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.

kr.mathworks.com

 

 

매트랩 데이터 구조 원칙

(딱히 명시된 것은 아니고 제가 해보면서 느낀 것입니다. 데이터 구조에 대한 전문적인 지식은 없어서 경험적으로 판단했습니다.)

 

1. 점(.)을 기준으로 데이터 구조가 깊게 들어간다.

2. 괄호()는 각 카테고리에 들어가는 데이터 순서

 

 

 

예를 들어 위와 같은 데이터 구조가 있다고 해보겠습니다.

DATANAME이라는 structure 안에는 category1, category2, category3이라는 필드field가 존재하고 각 field는 자유롭게 데이터 타입을 가질 수 있습니다. 저는 필드 안에 또 structure를 만들겠습니다. category1는 A,B,C라는 field가 존재하고 category1(1), category1(2)는 category1의 요소element입니다. 이 element가 가지고 있는 field에 값(int, char, array 등)을 넣을 수 있습니다.

 

아래 코드블록에 있는 것처럼 명령창에 입력하면,

DATANAME.category1(1).A = 1
DATANAME.category1(2).B = 1
DATANAME.category1(1).C = 2

이제 데이터 구조를 확인해보겠습니다.

 

보시면 category1(위 그림에서는 오타가 났네요.)의 element 중 첫 번째(맨 왼쪽 label에서 1)에 필드 A에 1을 넣고, C에는 2를 넣었습니다. scalar값 말고 배열을 넣어도 들어갑니다. 또한 element 중 두 번째(category1(2)) 필드 B에 1을 넣었습니다. 필드는 만드는 순서대로 쌓이기 때문에 제가 코드를 A,B,C 순서대로 만들어서 저렇게 설정된 것입니다.

 

 

DATANAME.catergory2.A = [1,2]

category2는 필드 A만 존재하고 안에는 배열을 넣습니다.

 

참고로 꼭 저렇게 쓰지 않고 하나씩 추가하고 싶다면,

DATANAME.category2.A(1) = 1
DATANAME.category2.A(2) = 2

이렇게 배열의 원소 하나씩 넣어줄 수도 있습니다.

 

 

 

DATANAME.category3(1).A = 'a'
DATANAME.category3(2).B = 2

이번에는 필드 A에 문자열을 넣어보았습니다. 그냥 a를 넣으면 변수 a로 인식하고 따옴표('')안에 넣어줘야 문자로 인식합니다.

 

 


예시

 

ANIMAL.rabbit(1).weight = 5;
ANIMAL.rabbit(1).color = 'black';
ANIMAL.rabbit(1).child(1) = 11;
ANIMAL.rabbit(1).child(2) = 7;
ANIMAL.rabbit(2).weight = 4;
ANIMAL.rabbit(2).color = 'brown';
ANIMAL.rabbit(2).child = [8,6,10];

 

실제로 해보면

명령창 입력
결과

이런 식으로 본인이 원하는 구조를 계속 깊게 만들어 나갈 수 있습니다. 지금은 char, int, array 정도만 안에 넣었지만 저 안에 또 구조체를 만들 수 있습니다.

 

 


구조체structure 외에도 많은 데이터형이 있지만 structure가 참 유용한 것 같습니다.

Comments