위의 그림과 같이 Matrix를 나눠서 그루핑하는 코드를 작성
수행 결과
Total Data Matrix
0.8024 0.8276 0.7137 0.2824 0.2484 0.3097
0.2389 0.3014 0.9827 0.4047 0.7002 0.4005
0.8046 0.3181 0.0585 0.1593 0.5042 0.9498
0.2743 0.4722 0.0372 0.3397 0.4923 0.9076
0.3968 0.8018 0.3257 0.6240 0.6685 0.4235
0.9832 0.4416 0.3409 0.9505 0.5189 0.8194
1-group 1-th sub matrix
0.8024 0.8276
0.2389 0.3014
1-group 2-th sub matrix
0.0585 0.1593
0.0372 0.3397
1-group 3-th sub matrix
0.6685 0.4235
0.5189 0.8194
2-group 1-th sub matrix
0.7137 0.2824
0.9827 0.4047
2-group 2-th sub matrix
0.5042 0.9498
0.4923 0.9076
2-group 3-th sub matrix
0.3968 0.8018
0.9832 0.4416
3-group 1-th sub matrix
0.2484 0.3097
0.7002 0.4005
3-group 2-th sub matrix
0.8046 0.3181
0.2743 0.4722
3-group 3-th sub matrix
0.3257 0.6240
0.3409 0.9505
코드
%% 초기화
clc; clear all; close all;
%% Matrix 의 index set
MatrixSize = 6; % Matrix의 크기
nrGroup = 3; % 몇 개의 group으로 나눌지 여부
k = MatrixSize/nrGroup; % 하나의 group에 해당하는 sub matrix의 크기
DataMatrix = rand(MatrixSize, MatrixSize); % 랜덤으로 Matrix를 만든다.
% 먼저 Full Matrix의 index set을 구한다.
idxSet = cell(nrGroup, nrGroup);
for i = 1:nrGroup
for j = 1:nrGroup
i_start = 1+(i-1)*k;
i_end = i*k;
j_start = 1+(j-1)*k;
j_end = j*k;
[mesh_i, mesh_j] = meshgrid(i_start:i_end, j_start:j_end);
mesh_idx = [mesh_i(:) mesh_j(:)];
idxSet{i, j} = [mesh_idx-repmat([0 1], k*k, 1)]*[1, MatrixSize]';
end
end
%% Matrix의 subMatrix의 index set
% SubMatrix의 index set을 구한다.
subIdxSet = cell(nrGroup, 1);
for i =1:nrGroup
subIdxSet{i} = [ [1:nrGroup]', mod([1:nrGroup]' + i-2, nrGroup)+1 ];
end
%% [테스트] 해당 그룹에 속하는 sub matrix를 구한다.
clc;
% 결과를 확인해본다.
% 전체 Data Matrix
fprintf('Total Data Matrix \n');
disp(DataMatrix);
for group_idx = 1:nrGroup
% 각 group의 idx에 대해서
for sub_mtx_i = 1:nrGroup
% 해당 group의 sub matrx의 idx에 대해서
subIdxList = subIdxSet{group_idx};
subMtxList = cell(nrGroup, 1);
% Sub Matrix들의 list를 구한다.
for i = 1:nrGroup
idxList = idxSet{subIdxList(i, 1), subIdxList(i, 2)};
subMtxList{i} = reshape(DataMatrix(idxList), k, k)';
end
fprintf('%d-group %d-th sub matrix \n', group_idx, sub_mtx_i);
disp(subMtxList{sub_mtx_i});
end
end
파워포인트 그림
'Enginius > Matlab' 카테고리의 다른 글
Rename bunch of files in Matlab (0) | 2014.08.05 |
---|---|
bar plot (0) | 2014.04.11 |
Double indexing (두 개의 for loop을 하나로 줄이기) (0) | 2014.03.19 |
두 선분 사이의 각도를 구해보자. (5) | 2014.03.10 |
[cprintf] colored print in console (0) | 2014.02.20 |