행과 열, row와 column
행과 열을 이해하는 것은 데이터를 다루는 데 있어 기본적이면서도 중요한 개념입니다. 여기서 "행"과 "열"을 시각적으로 이해하기 위한 간단한 방법을 소개하겠습니다.
"row"는 나란히 놓인 사물의 연속적인 배열을 의미하는 반면, "column"은 세워진 기둥처럼 수직으로 배열된 데이터를 의미합니다.
행(Row)
"Row"라는 단어는 원래 "열" 또는 "순서대로 나열된 일련의 물건"을 의미합니다. 이 단어의 뿌리는 배를 노로 젓는 행위에서 유래되었을 수도 있으며, 이는 노를 젓는 사람들이 한 줄로 나란히 앉아 동시에 노를 젖는 모습을 연상시킵니다. 이러한 모습은 데이터 테이블에서의 행과 비슷하게, 데이터가 가로로 나란히 배열되는 형태를 연상시키기 때문에 이 단어가 사용됩니다.
- 행은 가로줄입니다.
- 데이터 테이블에서 하나의 행은 그 테이블의 한 가지 사례(예: 한 명의 사용자, 하나의 관측값)를 나타냅니다.
- 행은 데이터셋에서 수평적으로 데이터를 배열합니다.
- 일반적으로 x축에 평행하게 그려집니다.
열(Column)
"Column"은 라틴어 "columna"에서 유래되었으며, "기둥" 또는 "주"를 의미합니다. 건축에서 기둥은 구조물을 지탱하는 세로 구성 요소로 사용됩니다. 이 비유는 데이터가 세로로 쌓여 있는 구조를 연상시켜 줍니다. 기둥이 건물을 지탱하듯이, 열은 데이터 테이블에서 특정 종류의 데이터를 지탱하는 역할을 합니다.
- 열은 세로줄입니다.
- 데이터 테이블에서 하나의 열은 모든 사례에 대한 한 가지 특성(예: 나이, 위치)을 나타냅니다.
- 열은 데이터셋에서 수직적으로 데이터를 배열합니다.
- 일반적으로 y축에 평행하게 그려집니다.
시각적 예시
다음은 3x3의 간단한 행렬을 예로 들어 "행"과 "열"을 시각화한 것입니다:
열1 열2 열3
행1: [ 1, 2, 3 ]
행2: [ 4, 5, 6 ]
행3: [ 7, 8, 9 ]
- 행은 가로줄로, 여기서 `행1`, `행2`, `행3`은 각각 `[1, 2, 3]`, `[4, 5, 6]`, `[7, 8, 9]`입니다.
- 열은 세로줄로, 여기서 `열1`, `열2`, `열3`은 각각 `[1, 4, 7]`, `[2, 5, 8]`, `[3, 6, 9]`입니다.
이 예에서 볼 수 있듯이, 행은 데이터셋의 가로 줄을 형성하며, 열은 세로 줄을 형성합니다. 데이터를 작업할 때, 특정 행을 참조하면 그것은 데이터셋의 한 사례(또는 관측값) 전체를 의미하며, 특정 열을 참조하면 그것은 모든 사례에 걸쳐 하나의 속성 또는 변수를 의미합니다.
이미지 포메이션에서의 x축과 y축
이미지 포메이션에서의 x축과 y축은 이미지를 구성하는 픽셀의 위치를 나타내는 데 사용되는 좌표계입니다. 일반적으로 2차원 이미지는 행렬로 표현되며, 각 픽셀의 위치는 (x, y) 좌표로 지정됩니다. 여기서 x축과 y축의 역할을 살펴보겠습니다.
X축
- X축은 이미지의 가로 방향을 나타냅니다.
- 이미지에서 왼쪽에서 오른쪽으로 이동할 때, x 좌표값이 증가합니다.
- X축의 값은 일반적으로 이미지의 가로 픽셀 위치를 나타냅니다. 예를 들어, x=0은 이미지의 가장 왼쪽 가장자리를 나타내고, x의 최대값은 이미지의 가장 오른쪽 가장자리를 나타냅니다.
Y축
- Y축은 이미지의 세로 방향을 나타냅니다.
- 이미지에서 위에서 아래로 이동할 때, y 좌표값이 증가합니다.
- 컴퓨터 그래픽스와 영상처리에서는, y축이 위에서 아래로 증가하는 것이 일반적입니다. 이는 일부 수학적 좌표계와 다를 수 있으며, 이러한 차이는 특히 영상처리를 할 때 유의해야 합니다. 예를 들어, y=0은 이미지의 가장 상단을 나타내고, y의 최대값은 이미지의 가장 하단을 나타냅니다.
이미지 좌표계의 이해
- 이미지 좌표계에서, (0, 0) 좌표는 일반적으로 이미지의 왼쪽 상단 모서리에 위치합니다.
- 따라서, (x, y) 좌표는 이미지의 왼쪽 상단에서 오른쪽으로 x 픽셀, 아래로 y 픽셀 이동한 위치에 해당하는 픽셀을 가리킵니다.
이러한 x축과 y축의 개념은 이미지 내에서 특정 픽셀이나 영역을 찾고, 이미지 처리 알고리즘을 적용하며, 객체의 위치를 정의하는 데 중요합니다.
아래는 위 예시이미지를 생성하는데 사용된 matlab 코드입니다.
I = zeros(32, 32);
rectSize = 16;
rectStartIndex = (32 - rectSize) / 2 + 1;
rectEndIndex = rectStartIndex + rectSize - 1;
I(rectStartIndex:rectEndIndex, rectStartIndex:rectEndIndex) = 128;
circleRadius = rectSize / 4;
[x, y] = meshgrid(1:32, 1:32);
circleCenter = 16;
circleIndices = (x - circleCenter).^2 + (y - circleCenter).^2 <= circleRadius.^2;
I(circleIndices) = 255;
[X, Y] = meshgrid(0:31, 0:31);
figure;
surf(X, Y, I);
axis([0 40 0 40 0 255]);
colormap gray
xlabel('x');
ylabel('y');
zlabel('f(x, y)');
view(135, 60);
figure,
imagesc(I);
colormap gray
axis([1 40 1 40]);
주의점
MATLAB과 Python(특히 NumPy나 이미지 처리 라이브러리인 OpenCV 등)의 배열 인덱싱에는 중요한 차이가 있습니다.
MATLAB은 1 기반 인덱싱을 사용합니다. 즉, 배열의 첫 번째 요소는 (1,1)입니다. 따라서 MATLAB에서 이미지나 행렬의 좌측 상단 모서리는 (1,1)로 표시됩니다.
반면에 Python은 0 기반 인덱싱을 사용합니다. NumPy 배열, 리스트, 이미지 배열 등의 첫 번째 요소는 (0,0)으로 표현됩니다.
'Python 기초' 카테고리의 다른 글
python 파이썬 각종 파일 불러오기 txt, mat, csv, xls, JSON, 이미지 (0) | 2024.02.15 |
---|---|
프로그래밍 화면 이해하기, 편집기, 스크립트창, 변수, 작업 공간, 명령 창, 콘솔 창, console창 (2) | 2024.02.08 |
파이썬에서의 __name__과 main 사용법: 모듈과 스크립트 이해하기 (0) | 2024.02.07 |
Python 자료형에 대한 기초 (1) | 2024.01.31 |
Integrated Development Environment(IDE), 통합개발환경이란? main.py 실행하기 / 공개된 저자코드 실행하기 (2) | 2024.01.29 |