ndarray 생성, 변경, 연산
1. ndarray를 생성하는 다양한 방법
1.1 np.array
가장 간단한 방법은 np.array()
함수를 사용하여 파이썬 리스트를 NumPy 배열로 변환하는 것입니다. 이 함수는 파이썬 리스트를 입력받아 NumPy 배열로 변환합니다. 리스트 외에 다른 파이썬 시퀀스 객체도 변환할 수 있으나 잘 사용하지 않습니다. 파이썬의 다른 시퀀스 객체를 변환할 경우 타입은 'object'가 됩니다.
1.2 np.zeros
np.zeros 함수는 모든 요소가 0인 배열을 생성합니다. 이 함수는 배열의 크기와 데이터 타입을 지정할 수 있어, 초기화된 배열이 필요할 때 유용합니다. 특히 대규모 계산에서 결과를 저장할 공간을 미리 할당할 때 자주 사용됩니다.
1.3 np.ones
np.ones 함수는 모든 요소가 1인 배열을 생성합니다. 이 함수는 데이터 정규화 과정에서 기준값을 설정할 때 유용하게 사용됩니다.
1.4 np.arange
np.arange 함수는 지정된 범위와 간격으로 균일하게 나누어진 값들로 배열을 생성합니다. 파이썬의 range 함수와 유사하지만, 실수 간격도 지정할 수 있어 더 유연합니다. 이 함수는 시퀀스 데이터를 생성하거나 그래프의 축 값을 만들 때 자주 사용됩니다.
1.5 np.linspace
np.linspace 함수는 지정된 범위 내에서 균일한 간격으로 나누어진 값들로 배열을 생성합니다. 시작점, 끝점, 그리고 생성할 요소의 개수를 지정하면, 그 사이를 균등하게 나눈 값들을 만들어냅니다. 이 함수는 특히 수학적 함수의 도메인을 생성하거나 데이터 보간에 유용합니다.
np.arange vs np.linspace
특징 | np.arange | np.linspace |
---|---|---|
기능 | 일정 간격으로 숫자 시퀀스 생성 | 지정된 범위에서 동일한 간격으로 숫자 생성 |
파라미터 | start , stop , step |
start , stop , num , endpoint |
간격 지정 방법 | step 값을 통해 간격 지정 |
num 값을 통해 개수 지정 |
종료 값 포함 여부 | 포함하지 않음 (stop 미포함) |
기본적으로 포함 (endpoint=True ) |
주요 용도 | 정수 또는 간격이 일정한 실수 배열 | 특정 범위에서 균등한 간격의 실수 배열 생성 |
출력 예시 | np.arange(0, 10, 2) => [0, 2, 4, 6, 8] |
np.linspace(0, 10, 5) => [0.0, 2.5, 5.0, 7.5, 10.0] |
2. 기본적인 배열 조작
2.1 reshape
reshape 함수는 배열의 형태를 변경합니다. 이 함수는 배열의 차원과 각 차원의 크기를 새롭게 지정할 수 있게 해주며, 요소의 총 개수는 변하지 않습니다. 다차원 데이터를 다룰 때 매우 유용하며, 예를 들어 1차원 데이터를 2차원 행렬로 변환하거나 그 반대의 경우에 사용됩니다. 주의해야 할 것은 요소의 갯수가 변경되지 않기 때문에 요소의 갯수가 맞지 않을 경우 오류가 발생합니다.
2.2 astype
astype 함수는 배열의 데이터 타입을 변경합니다. 이 함수를 사용하면 정수형에서 실수형으로, 또는 그 반대로 데이터 타입을 쉽게 변환할 수 있습니다. 데이터 처리 과정에서 타입 변환이 필요할 때 유용하며, 특히 메모리 사용을 최적화하거나 특정 연산에 적합한 데이터 타입으로 변경할 때 사용됩니다.
2.3 ravel
ravel 함수는 다차원 배열을 1차원 배열로 평탄화합니다. 이 함수는 원본 배열의 뷰(view)를 반환하므로 메모리 효율적입니다. 복잡한 다차원 데이터를 선형으로 처리해야 할 때 유용하며, 예를 들어 다차원 이미지 데이터를 1차원으로 변환하여 기계학습 모델에 입력할 때 사용할 수 있습니다.
뷰(view)란?
뷰(View)는 NumPy에서 원본 배열을 복사하지 않고, 원본 배열의 데이터를 다른 방식으로 볼 수 있게 해주는 기능입니다. 쉽게 말해, 원본 배열을 새로운 형태로 보여주는 창과 같은 역할을 합니다.
뷰는 원본 데이터를 그대로 사용하기 때문에, 새로운 메모리를 차지하지 않습니다. 그래서 뷰에서 데이터를 변경하면 원본 배열도 함께 변경됩니다.
2.4 flatten
flatten 함수도 다차원 배열을 1차원 배열로 평탄화하지만, ravel과 달리 항상 배열의 복사본을 반환합니다. 이는 원본 데이터를 유지하면서 평탄화된 버전이 필요할 때 유용합니다. 데이터 분석 과정에서 원본 구조를 보존하면서 1차원 배열로 변화가 필요한 경우에 적합합니다.
2.5 transpose
transpose 함수는 배열의 축을 바꿉니다. 2차원 배열의 경우, 행과 열을 서로 바꾸는 효과가 있습니다. 이 함수는 행렬 연산에서 매우 중요하며, 데이터의 구조를 변경하여 다른 관점에서 분석하거나 처리할 때 유용합니다. 예를 들어, 시계열 데이터에서 특성과 시간 축을 바꿀 때 사용할 수 있습니다.
3. 간단한 수학 연산
3.1 배열 간 산술 연산
+
, -
, *
, /
등의 연산자를 사용하여 NumPy 배열 간의 기본적인 산술 연산을 수행합니다. 이러한 연산은 요소별로 이루어지며, 같은 크기의 배열 간에 덧셈, 뺄셈, 곱셈, 나눗셈 등을 수행할 수 있습니다.
3.2 배열 간 비교 연산
>
, <
, ==
등의 비교 연산자를 사용하여 NumPy 배열 간의 비교 연산을 수행할 수 있습니다. 이러한 연산은 요소별로 이루어지며, 같은 크기의 배열 간에 대소 비교, 같음 여부 등을 판단할 수 있습니다.
3.3 배열 간 논리 연산
&
, |
, ^
등의 논리 연산자를 사용하여 NumPy 배열 간의 논리 연산을 수행할 수 있습니다. 이러한 연산은 요소별로 이루어지며, 같은 크기의 배열 간에 AND, OR, XOR 등의 논리 연산을 수행할 수 있습니다.
3.4 배열 간 집계 연산
sum
, mean
, max
, min
등의 집계 함수를 사용하여 NumPy 배열의 요소들을 집계할 수 있습니다. 이러한 함수는 배열의 요소들을 하나의 값으로 계산하여 반환하며, 데이터의 통계적 특성을 파악하거나 데이터의 크기를 줄일 때 유용합니다.
4. 브로드캐스팅
브로드캐스팅은 크기가 다른 배열 간에 연산을 수행할 수 있게 해주는 NumPy의 강력한 기능입니다. 이를 통해 작은 배열이나 스칼라 값을 큰 배열과 연산할 수 있으며, NumPy가 자동으로 작은 배열을 확장하여 연산을 수행합니다. 이는 코드를 간결하게 만들고 메모리 사용을 최적화하는 데 도움이 됩니다. 브로드캐스팅은 작은 배열이나 숫자 하나를 가지고 큰 배열과 연산할 수 있게 해줍니다.