본문 바로가기
Python

파이썬 라이브러리 Numpy (Python Library Numpy)

by wanttosleep1111 2023. 1. 12.

파이썬 라이브러리 Numpy (Python Library Numpy)

 

※ import numpy as np : numpy 모듈을 import하고 np라는 별칭으로 부르겠다. ( np 사용 권장 )

 

다차원 배열 제공

  • ndarray(number of dimension array) 클래스가 지원하고 있음
  • 동일한 자료형을 가지는 값들이 배열 형태로 존재
  • n차원의 형태로 구성 가능
  • 데이터에 접근을 최적화하기 위해 index(색인)를 부여

 

 


 

1. 배열 생성

 

① 1차원 배열 생성

  • 배열 생성 함수 :  np.array()
lst1 = [1, 2, 3, 4, 5] # 리스트
arr = np.array(lst1) # 배열을 생성하는 함수 np.array()
arr # 배열

 

② 2차원 배열 생성

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

 

③ 타입을 지정하여 배열 생성 : np.array(배열데이터, dtype = np.데이터타입)

arr_dtype = np.array([1.2, 2.3, 3.4], dtype = np.int64)
arr_dtype

 

④ 생성된 배열의 타입 변경하기 : 배열명.astype(np.데이터타입)

arr_dtype = np.array([1.2, 2.3, 3.4], dtype = np.int64)
arr_type = arr_dtype.astype(np.float64)
arr_type

arr_type.dtype

 

⑤ 특정한 값으로 배열 생성하기 

  • np.zeros((행, 열))
arr_zeros = np.zeros((3, 4))
arr_zeros

 

  • np.ones((행, 열))
arr_ones = np.ones((4,5))
arr_ones

 

  • np.fulls((행, 열), 특정숫자)
arr_full = np.full((3,3), 7)
arr_full

 

⑥ 연속된 특정 숫자로 배열 생성

  • for문 range함수를 이용해 리스트를 만들고, 리스트를 담은 배열 생성
lst1 = []
for i in range(1,51) :
    lst1.append(i)
arr_l = np.array(lst1)
arr_l

 

 

  • np.arange(시작, 끝, 증감값) : 1차원 배열만 생성
range_arr = np.arange(1,51)
range_arr

 

  • np.arange(시작, 끝, 증감값).reshpae(행,열) : 2차원 배열 생성
range_arr2 = np.arange(1,51).reshape(5,10)
range_arr2

  • arr_ran = np.random.rand(행,열) : 0~1까지 랜덤 수를 행, 열을 가지는 배열 형태로 생성
arr_ran = np.random.rand(2,3)
arr_ran

 

arr_randint = np.random.randint(1,51, size=(5,10))
arr_randint

 


 

2. 배열 변수

  • 배열의 크기 확인 : shape
  • 배열의 차원 확인 : ndim
  • 배열 전체의 요소 개수 확인 : size
  • 배열 데이터 타입 확인 : dtype

① shape : 배열의 크기 확인

arr2 = np.array([[1,2,3],[4,5,6]])
print(arr2)
arr2.shape

 

② ndim : 배열의 차원 확인

arr2 = np.array([[1,2,3],[4,5,6]])
print(arr2)
print(arr2.ndim,'차원')

 

③ size : 배열의 전체 요소 개수 확인

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

print(arr)
print(arr.size)

 

④ dtype : 배열의 타입 확인

arr_float = np.array([1.2, 3.4, 5.6])
print(arr_float)
print(arr_float.dtype)

 


 

3. 배열 연산

 

배열 요소별 연산

arr3 = np.arange(2,10,2)
print(arr3)
print(arr3/2) # 차원이 다른 연산 가능 Broadcasting
print(arr3+5)
print(arr3+arr3) # 배열끼리도 연산 가능

 


 

4. 데이터 접근 (indexing & slicing)

 

① 1차원 배열 접근

arr5 = np.arange(1,11)
print(arr5)
print(arr5[1])
print(arr5[2:6])
print(arr5[[0,4,5]]) # 여러가지 데이터를 동시에 인덱싱 가능

 

② 2차원 배열 접근

※ np.arange().reshape(행, 열) : 1차원 배열을 2차원 행, 열 배열로 생성

arr6 = np.arange(1,51).reshape(5,10)
print(arr6)
print(arr6[4,2]) # 2차원 배열 인덱싱
print(arr6[:,2]) # 2차원 배열 슬라이싱
print(arr6[2:,5:]) # 2차원 배열 슬라이싱

 

arr2 = np.arange(30).reshape(5,6)
print(arr2)
print(arr2[2,2])
print(arr2[3,3])
print(arr2[[2,3],[2,3]]) # 2차원 배열에서 여러 값을 한번에 인덱싱하기

 

arr6 = np.arange(1,51).reshape(5,10)
print(arr6)
print(arr6[1,[4,5,6]]) # 행 하나의 여러열 값 인덱싱
print(arr6[3, ::3]) # 행 하나의 여러열 값 슬라이싱

 


 

5. boolean 인덱싱

  • 논리 연산자를 활용하여 True, False 결과 출력
  • True값에 해당하는 데이터만 접근
  • 특정 기준에 의해 접근하는 방식

※ 랜덤 값을 생성할 때 seed값을 주기 : seed값이 같으면 같은 랜덤 숫자 생성

np.random.seed(숫자)

 

▶ 연습

seed값을 4로 50~100까지 8개의 랜덤 값을 생성하고 score라는 1차원 배열을 생성하기

boolean인덱싱을 이용해 점수가 70이상인 값의 수를 구하기

np.random.seed(4)
score = np.array(np.random.randint(50,100, size=8))
print(score)
print(score[score>=70].size)

 

▶ 연습

height_weight.txt 데이터를 불러오고, bmi 지수 구하기

(bmi 지수 = 몸무게/키(m)**2)

과체중 bmi 지수 23<= bmi <=25 데이터 개수 구하기

 

※ numpy 데이터 불러오기 (delimiter 데이터 구분자)

np.loadtxt('주소경로', delimiter=' ')

※ 비트연산자 &(and), |(or)

 

data = np.loadtxt('./data/height_weight.txt', delimiter=',')
data

bmi = data[1]/(data[0]*0.01)**2
bmi

bmi[(bmi>=23)&(bmi<=25)].size

 


 

6. 데이터 수정하기

 

▶ 연습

2차원 배열 arr6의 1,3,5,7,9열 데이터를 모두 1로 바꾸기

arr6 = np.arange(1,51).reshape(5,10)
arr6
arr6[:,::2] = 1
arr6

 


 

7. numpy 유용한 함수

arr7 = np.arange(1,30)
arr7

 

① sum()

print(arr7.sum())
print(np.sum(arr7))

 

② mean()

print(arr7.mean())
print(np.mean(arr7))

 

③ sqrt()

print(np.sqrt(arr7))

 

④ abs()

arr8 = np.array([-1,-2,-3,4,5,6])
print(arr8)
print(np.abs(arr8))

댓글