일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 에러기록
- ChatGPT
- 생산성
- WOX
- Julia
- Zotero
- Python
- pytorch
- 수치해석
- Linear algebra
- 옵시디언
- 논문작성
- 텝스공부
- 우분투
- 텝스
- obsidian
- 딥러닝
- Numerical Analysis
- IEEE
- 고체역학
- 수식삽입
- teps
- LaTeX
- 논문작성법
- Dear abby
- Statics
- JAX
- matplotlib
- 인공지능
- MATLAB
- Today
- Total
뛰는 놈 위에 나는 공대생
[매트랩 MATLAB] 데이터 구조 만들기 본문
매트랩에서는 작업공간에 다양한 데이터 구조를 저장할 수 있습니다.
구조 안에 또 구조를 만들 수 있었는데, 보는 것은 그렇다치고
직접 구조체(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 사이트에서 얻어가시면 좋을 것 같습니다.
매트랩 데이터 구조 원칙
(딱히 명시된 것은 아니고 제가 해보면서 느낀 것입니다. 데이터 구조에 대한 전문적인 지식은 없어서 경험적으로 판단했습니다.)
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가 참 유용한 것 같습니다.
'프로그래밍 Programming > 매트랩 MATLAB' 카테고리의 다른 글
[MATLAB] Symbolic 식에서 복잡한 숫자로 된 분수를 소수로 바꾸기 (0) | 2022.04.07 |
---|---|
[MATLAB] Figure 그릴 때 유용한 명령어 및 기능 모음 (0) | 2022.02.24 |
[MATLAB] String형과 Char형 결합 (0) | 2022.02.24 |
[매트랩MATLAB] 기호 대입 (0) | 2021.05.24 |
[매트랩MATLAB] 기호가 포함된 행렬 계산하기 (0) | 2021.02.25 |