새소식

카테고리 없음

Python 기초 5 - NumPy 라이브러리 (1)

  • -

 

NumPy 라이브러리

- 행렬이나 대규모 다차원 배열을 쉽게 처리할 수 있도록 하는 Python의 라이브러리 (출처: 위키백과)

- 주로 빠른 데이터 처리에 이용됨

 

 

 

1. 다차원 배열 객체 생성 ndarray(N-Dimensional array)

- 파이썬의 리스트와 다르게 넘파이 어레이는 원소가 모두 같은 데이터 타입이어야 한다. 

 

1) array 함수 이용

data1 = [1,2,3,4]
arr1=np.array(data1)

- dtype 메소드: array의 데이터 타입 보여줌

- ndim 메소드: 행렬의 차원 보여줌

- shape 메소드: 행렬의 행과 열의 크기

 

2) 명시적으로 데이터 타입 지정하여 배열 생성

arr1=np.array([1,2,3],dtype=np.float64)

 

3) 새로운 배열 생성 함수 이용

- array 함수

- arange 함수

- zeros 함수: 입력받은 길이 또는 차원만큼의 배열에 모두 0이 들어있는 배열 생성

np.zeros(4)
#>> [0.,0.,0.,0.]

- ones 함수: 입력받은 길이 또는 차원만큼의 배열에 모두 1이 들어있는 배열 생성

#튜플로 shape 지정도 가능하다.

np.ones((2,2))
'''
>>
[[1.,1.],
[1.,1.]]
'''

- empty 함수: 입력받은 길이 또는 차원만큼 초기화되지 않은 값이 들어있는 배열 생성

** 여기서 초기화란 zeros, one 함수와 가장 다른 점으로 zeros, ones 함수는 메모리를 할당받아 0과 1로 초기화하고 반환하지만, empty는 메모리만 할당받고 아무 값이나 내보낸다. 장점은 타함수보다 빠르다는 것, 단점은 쓸 데가 많이 없다는 것.

 

 

2.  ndarray의 데이터 타입

1) astype: 배열을 다른 데이터 타입으로 반환

#dytype('int64')
arr=np.array([1,2,3])

#변환 => np.float64
float_arr=arr.astype(np.float64)

- float -> int 소수점 버려짐

- int -> float 정수 뒤에 점 찍힘

- 숫자형식 문자열 -> 숫자형 가능

arr.astype(np.int32)
#>>>array([1, 2, 3, 4, 5], dtype=int32)

arr.astype(int)
#>>>array([1, 2, 3, 4, 5])

*** 차이가 뭔지 모르겠숴요

 

2) 다른 배열 주고, 그 배열의 dtype으로 변환 가능

#int형 배열 생성
int_arr=np.arange(10)

#타배열
following_arr=np.array([.1,.2,.4], dtype=np.float64)

#형변환
int_arr.astype(following_arr.dtype)

 

3. NumPy 배열 산술 연산

1) 배열간 연산

- 벡터화되어있기에, for 문을 사용하지 않고 배열의 각 원소끼리 산술 연산한다. 

arr=np.array([[1.,2.,3.],[4.,5.,6.]])

arr+arr
#>>> array([[ 2.,  4.,  6.],
#          [ 8., 10., 12.]])

arr*arr
#>>> array([[ 1.,  4.,  9.],
#          [16., 25., 36.]])

arr-arr
#>>> array([[0., 0., 0.],
#         [0., 0., 0.]])

 

2) 배열-스칼라 연산

- 배열의 모든 원소와 스칼라 산술 연산

arr*10

#>>> array([[ 10.,  20.,  30.],
#          [ 40., 50., 60.]])

 

3) 비교 연산

- 같은 크기의 배열 간 비교 연산 가능, Boolean 값 반환

 

4) 브로드캐스팅

- 배열의 크기를 일치시켜 다른 크기 (shape)의 배열도 연산을 가능하게 한다. 

 

 

4. NumPy 인덱싱과 슬라이싱

- 인덱싱: [단일 값]

- 슬라이싱: [:]

 

1) 배열 조각에 스칼라값 대입하기

: 원본 배열을 슬라이싱해 새로운 스칼라값을 대입하면 원본 배열이 바뀌며, 해당 슬라이싱 조각의 특정 인덱스에 새로운 값을 다시 대입해도 여전히 원본 배열이 바뀐다. 

** .copy()를 통해 복사본을 만들어 활용하기도 한다. 

 

2) 다차원 배열에 접근하기

arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])

- 재귀적으로 접근하기; 0번 인덱스 안에 1번 인덱스에 접근하기

arr2d[0][1]
#=
arr2d[0,1]

- 일반 리스트에서는 다차원 슬라이싱이 불가능하다

#np.array
arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2d[:2,1:]

#list
list1= [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
#ok
print(list1[:2])
#not ok
print(list1[:2, 1:])
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.