1주차에서 환경 설정,
2주차에서 기본 코딩,
3주차는 numpy에 대해 배우며 본격적인 데이터 분석 준비를 했다.

numpy를 배우면서 새로 배우는 개념이 많다보니 힘들었다.. 어려워 ㅠ

이해한 내용을 바탕으로 차근차근 정리해보려한다.
다음 수업으로 이해 범위가 넓어지면 그만큼 내용을 더 보강해봐야지!

Numpy?

Numpy는 Numerical python의 약자로 python에 기본 내장되어 있는 리스트기능보다 다양한 기능(강력한 성능!)을 자랑하는 라이브러리이다.
Numerical computing이라고 해서 컴퓨터가 실수값을 효과적으로 계산할 수 있도록 하는 연구 분야이며,
Vector Arithmetic(벡터 연산)을 한다. (데이터가 벡터로 표현되기 때문에 벡터연산이 꼭 필요!)

여기서 처음 접하는 개념이 나왔다.
바로 벡터 연산!

벡터: 크기와 방향을 갖는 양을 벡터라고 하고 그림으로는 화살표가 붙은 유향 성분을 이용한다.

네이버 지식백과 출처 https://terms.naver.com/entry.naver?docId=945583&cid=47324&categoryId=47324

벡터 연산: 벡터의 내적이나 행렬의 곱처럼 벡터 형식의 데이터에 대한 연산을 가리킨다.

네이버 지식백과 출처: https://terms.naver.com/entry.naver?docId=840928&cid=50376&categoryId=50376

python에서 쉽게 활용할 수 있는 list와 비슷한 numpy의 기능이 numpy array인데,
numpy의 위같은 특징 때문에, numpy array에 있는 데이터들은 벡터 데이터이며 벡터 연산을 적용한다.

numpy array 특징

연산에 대해 이야기하기 전에, numpy array에 대한 특징을 몇가지 정리하자면,

1. 모든 data type이 동일 해야 한다.

파이썬은 string, int, float등 다양한 데이터 타입을 한 리스트에서 다룰 수 있지만, numpy array에서는 한가지 데이터 타입만 담아야 한다.

2. numpy array는 선언할 때 크기를 지정한 뒤 바꿀 수 없다.

파이썬 리스트는 list.pop(), list.append() 등의 함수를 통해 리스트를 선언한 뒤에도 빼거나, 넣어서 크기를 바꿀 수 있지만 numpy array는 불가능 하다. numpy array의 크기를 변경할 때는 해당 array를 복사해서 더 큰 크기로 다시 만드는 개념이지, 똑같은 array의 크기를 늘리는 개념이 아니다.

3. numpy array는 c, c++언어로 구현되어있다.

이는 numerical computing에 취약한 파이썬의 단점을 보완하고자 한 방법이며, 훨씬 고성능을 발휘할 수 있다.

4. 원소의 type checking을 할 필요가 없다.

앞서 이야기한 것 처럼 모든 타입이 동일해야 하기 때문에 파이썬과 달리 array 안에 있는 원소의 타입을 하나하나 체크할 필요가 없고, 때문에 동작도 파이썬 list보다 빠를 수 밖에 없다. 이 속도는 데이터의 크기가 클수록 차이가 나며 시간을 크게 단축시켜 준다.

위 특징들을 가지고 결론내리자면,
numpy array는 활용이 쉽게 만들어진 파이썬의 성능을 보완하기 위해 만들어진 것이며,
데이터 분석의 효율성을 크게 높여주는 라이브러리라고 이야기할 수 있다.
다만, 성능을 높이다보니 자율성은 조금 떨어지고, 활용도 조금 어려울 수 있겠다!

numpy array 기본 코딩

1. 라이브러리 import

numpy 라이브러리를 불러온다.

import numpy as np

2. 파이썬 리스트 또는 튜플을 numpy array로 변환

리스트 변환
np.array([1, 2, 3, 4, 5])
튜플 변환
np.array((1, 2, 3, 4, 5))

array는 위와 같이 1행으로 만들 수도 있고, 아래와같이 여러행으로 만들 수도 있다.

파이썬 2차원 리스트 생성
data = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
        ]
2차원 리스트를 np.array로 변환
arr = np.array(data)
결과
array([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])

아래는 numpy array의 다양한 속성을 알아볼 수 있는 코드이다.

arr.ndim	#arr의 차원
arr.shape	#arr의 행, 열 크기
arr.size	#arr의 행 x 열
arr.dtype	#arr의 원소 타입
arr.itemsize	#arr의 원소 사이즈(bytes)
arr.nbytes	#itemsize x size 	numpy array 가 차지하는 메모리 공간

numpy array 벡터 연산

앞서 말했듯이 numpy array는 벡터 연산을 한다.
즉, list 의 더하기 빼기 등 기본 연산이 리스트 원소를 합치고 제거하는 것이었다면,
numpy array는 행과 열에 맞춰 더하기, 빼기가 된다.

리스트의 경우

l1 = [1, 2, 3]
l2 = [4, 5, 6]
l1 + l2 == [1, 2, 3, 4, 5, 6]

numpy array의 경우

v1 = np.array((1, 2, 3))
v2 = np.array((4, 5, 6))
v1 + v2 == array([5, 7, 9])
v1 - v2 == array([-3, -3, -3])
v1 * v2 == array([ 4, 10, 18])
v1 / v2 == array([0.25, 0.4 , 0.5 ])
v1 @ v2  == 32  	# 1x4 + 2x5 + 3x6 = 32

그래서 아래와 같이 numpy array 의 크기가 다를 경우 연산 에러가 발생한다.

v3 = np.array((1, 2, 3))
v4 = np.array((4, 5, ))

오늘 정리는 여기까지!
아직 이해하지 못한 부분이 많아서 내용이 단순하지만,
강의를 들으면서 더 많이 배우고, 글을 풍성하게 만들어 볼 예정이다! :)

profile
왕초보 탈출기 입니다!! :)

0개의 댓글