일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- HTML5.
- html5
- 프로그래밍 언어
- Java
- 확률
- C
- LaTeX
- 리브레위키
- python
- html
- css3
- 프로그래밍
- 물리학
- C++
- 글이_점점_짧아지고_있습니다.
- 위키
- 점자
- IT
- ┌─┐
- matlab
- 수학
- 자바스크립트
- 나무위키
- CSS
- 선형대수학
- Nemeth Braille
- javascript
- 오늘의 문제
- Inkscape
- C언어
- Today
- Total
SturdyCobble's Study Note
[MATLAB] 07. 다차원 배열 본문
NOTICE : 독학인 만큼, 잘못된 내용이 있을 수 있습니다. 내용 지적은 언제나 환영합니다.
더 이상 이 블로그에는 글을 올리지는 않을 예정입니다. 그렇지만 댓글을 달아주시면 최대한 답변드리고자 노력하겠습니다.
※ 이 글은 최소한 Python과 같은 프로그래밍 언어를 한 번 이상 접한 사람을 독자로 가정하여 작성되었습니다. 사용버전은 R2019a기준입니다. 또한 기본적인 프로그램 조작보다는 프로그래밍에 초점을 맞추어 작성하였습니다.
가끔은 2차원의 배열 즉, 일반적인 행렬 이상의 배열에 접근해야 할 때가 있습니다. 이때, 다차원 배열을 이용합니다. 행렬과 같이 zeros, ones, rand, randn을 통해 생성 가능합니다.
>> A = ones(3,4,5)
A(:,:,1) =
1 1 1 1
1 1 1 1
1 1 1 1
A(:,:,2) =
1 1 1 1
1 1 1 1
1 1 1 1
A(:,:,3) =
1 1 1 1
1 1 1 1
1 1 1 1
A(:,:,4) =
1 1 1 1
1 1 1 1
1 1 1 1
A(:,:,5) =
1 1 1 1
1 1 1 1
1 1 1 1
이러한 다차원 배열을 통해 3차원 이상의 정보를 표시해볼 수도 있습니다.
sum이나 all, any 등의 함수는 마지막 인수로 차원을 받을 수 있습니다. 이 경우 해당 차원에 대해서 계산을 진행합니다. 아래와 같이 작성해볼 수 있습니다.
%코드
A = randn(2,2,2);
disp("열 마다 계산")
sum(A) % sum(A,1)과 동일
disp("행 마다 계산")
sum(A,2)
disp("3번째 축으로 합산")
sum(A,3)
---------------------------실행 결과---------------------------
열 마다 계산
ans(:,:,1) =
6.3478 1.6850
ans(:,:,2) =
0.6623 0.5098
행 마다 계산
ans(:,:,1) =
2.2285
5.8044
ans(:,:,2) =
1.4401
-0.2680
3번째 축으로 합산
ans =
4.3038 -0.6351
2.7064 2.8300
그림으로 나타내면, sum(A,3)을 다음과 같이 이해할 수 있습니다.
MATLAB에는 셀(Cell)형 배열도 존재합니다. 이는 크기가 다른 여러 배열의 복사본을 원소로 가질 수 있습니다. cell함수를 이용하거나 중괄호로 선언하며, 중괄호로 특정 원소에 접근합니다.
%코드
A = randn(2,2,2);
B = { A sum(A) ; sum(sum(sum(A),2),3) prod(A(:,:,1))}
C = cell(2,2,2)
---------- 실행 결과 -----------------
B =
2×2 cell 배열
{2×2×2 double} {1×2×2 double}
{[ -2.7785]} {1×2 double}
2×2×2 cell 배열
C(:,:,1) =
{0×0 double} {0×0 double}
{0×0 double} {0×0 double}
C(:,:,2) =
{0×0 double} {0×0 double}
{0×0 double} {0×0 double}
MATLAB에는 C/C++에도 존재하는 구조체라는 문법이 있습니다. 사용 방법은 간단합니다.
S.name = 'James';
S.id = 'James101';
disp(S)
U = struct('name','peter','major','computer science'}
-------------실행 결과---------------
name: 'James'
id: 'James101'
U =
다음 필드를 포함한 struct:
name: 'peter'
major: 'computer science'
이렇게 다양한 속성 들을 추가할 수 있습니다. 이렇게 함으로서 비슷한 형태의 여러 데이터를 한 번에 처리할 수 있습니다. 예를 들어 3명의 성적 정보를 다룬다고 해봅시다.
S.name = 'James';
S.score = 100;
S(2).name = 'Mike';
S(3).name = 'Peter';
S(2).score = 78;
S(3).score = 12;
S
[S.score]
[S.name]
char(S.name)
{S.name}
---------------실행 결과(개행은 임의로 변경하였음)------------------------------
S =
다음 필드를 포함한 1×3 struct 배열:
name
score
ans =
100 78 12
ans =
'JamesMikePeter'
ans =
3×5 char 배열
'James'
'Mike '
'Peter'
ans =
1×3 cell 배열
{'James'} {'Mike'} {'Peter'}
만약 성적 처리를 해야한다면, 필드 명을 동적으로 활용할 수 있어야 합니다. 이는 .( 변수 )와 같은 형식으로 가능해집니다.
ExamScore.Mike = struct('score',[10,7,6,8,9,10]);
ExamScore.James = struct('score',[10,10,4,8,9,10]);
name = 'James';
scList = ExamScore.(name).score;
sizeList = size(scList);
sum(scList,2) / sizeList(2)
------------실행 결과-----------------
ans =
8.5000
'프로그래밍 > MATLAB' 카테고리의 다른 글
MATLAB으로 벡터장 표시하기 (0) | 2019.08.30 |
---|---|
MATLAB으로 Newton's Method 구현하기 (0) | 2019.08.26 |
[MATLAB] 06. 벡터화와 사전할당 (0) | 2019.08.13 |
[MATLAB] 05. 제어식과 논리 첨자 (0) | 2019.08.12 |
[MATLAB] 04. 2D, 3D 그래프 (0) | 2019.08.04 |