python - 라이브러리와 Numerical Python(Numpy)

songmin jeon·2023년 12월 26일
0

1. 라이브러리 개념


1.1. module 만들기

'import 파일명' 으로 통해 . 으로 각 기능을 불러 올 수 있음.


1.2. 라이브러리

여러 패키지와 모듈을 포함하는 코드 모음



2. 라이브러리 사용해보기

NumPy 라이브러리

  • Numerical Python 약자 (numpy)
  • Python에서 수치계산을 위한 핵심 라이브러리
  • ndarray(N-dimensinal array) 클래스 지원

2.1. import numpy

import numpy as np

import numpy를 가져옴
별칭으로 as : np


2.2. ndarray(N-dimensional array)

  • 다양한 수학함수 지원
  • 빠른 연산 속도
  • 브로드 캐스팅 : 타원을 동일시 하는 기능
  • 다차원의 배열 지원
  • ※ 동일한 자료형만 가질 수 있음
  • 각 값들은 index를 가지고 있음 -> 인덱싱 과 슬라이싱 가능!
# ndarray 생성 : 첫번째 방법
# 시퀀스 데이터를 array롸로 형변환 하는 방법

# list 생성
list1 = [1,2,3,4,5]

# array 생성(형변환)
arr1 = np.array(list1)
type(arr1)

# ndarray 생성 : 첫번째 방법
# 직접 array화 시켜주는 방법

# array 생성
arr2 = np.array([1,2,3,4,5])
type(arr2)

2.3.ndarray 과 list

# ndarray 생성 : 2차원
arr3 = np.array([[1,2,3],[4,5,6]])

# list 와 ndarray 의 차이 -> ndarray 는 다타원의 배열을 인식함 !
list3 = [[1,2,3],[4,5,6]]

print(arr3)
print(list3)

list3+list3 # list 는 배열을 연결(사칙연산 x )
arr3 ** arr3 # array 는 사칙연산 가능

  • 브로드 캐스트 : 차원 수를 동일시 하는 기능
  • 주의사항! 내부 요소는 꼬 동일한 자료형이여야함 !
  • 2차원의 경우 행과 열의 값이 맞게 떨어져야함.

2.4. ndarray 확인하기

  • 함수가 아닌 속성으로 ndarray를 확인 !
# 배열의 차원 확인하기
# array 명, ndim

arr1.ndim # -> 1
arr3.ndim # -> 2

# 배열의 전체 요소개수 확인하기
# array명.size

# len() 와 .size 차이
# len() : 내장함수, 길이를 반환
# size : array의 모든 요소 개수를 반환

# 1차원 요소개수 확인
print(len(arr1))	# -> 5
print(arr1.size)	# -> 5

# 2차원 요소개수 확인
print(len(arr3))	# -> 2
print(arr3.size)	# -> 6

2.5. 배열 요소타입 확인

array명.dtype


2.6. ndarray dtype 및 shape 변경

  • 데이터 타입을 직접 지정해서 배열 생성
    list3 = [[1.7,4.2,3.6],[4.1,2.9,5.8]]

  • 실수타입 -> 정수타입 변경
    arr4 = np.array(list3, dtype = np.int64)

  • 정수타입 -> 정수타입 변경
    temp = arr4.astype(np.float64)


2.7. ndarray 행과 열의 크기 변경

행과 열의 값이 맞게 떨어져야함 -> size가 같아야함.

  • 변경 전
array([[1., 4., 3.], [4., 2., 5.]])
  • 변경 후
    arr4.reshape(3,2)
array([[1, 4], [3, 4], [2, 5]])

2.8. 특정한 값으로 ndarray 생성하기

- np.zeros((행, 열)) -> 2차원 이상의 배열인 경우 튜플로 packing(감싸줘야 함!)

모든 값 0으로 초기화

np.zeros((4,5))

array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])

- np.ones((행,열))

모든 값 1로 초기화

np.ones((5,5))

array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])

- np.full((행,열), 원하는 값)

원하는 값으로 배열 생성

np.full((5,5),10)

array([[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10],
[10, 10, 10, 10, 10]])

- np.random.rendint( 시작값, 끝값(미포함), size=(행,열) )

랜덤 값으로 배열 생성

arr_randint = np.random.randint(1, 10, size=(3,2) )

array([[8, 7],
[3, 2],
[8, 6]])

- np.random.rand(행, 열)

랜덤값으로 배열 생성 (0 ~ 1)

arr_rand = np.random.rand(5,5)

array([[0.12007379, 0.92903907, 0.78109664, 0.12871542, 0.69979169],
[0.01702009, 0.28202012, 0.23999712, 0.0135044 , 0.90971469],
[0.11468639, 0.31826651, 0.97481437, 0.46780991, 0.01594763],
[0.69047716, 0.57892797, 0.59778496, 0.84317878, 0.13287362],
[0.06143617, 0.52703934, 0.36261323, 0.12625558, 0.30333988]])


2.9. ndarray 인덱싱 & 슬라이싱

1차원 array 생성 후 인덱싱

  • 인덱싱
arr1[2]
  • 슬라이싱
arr1[3:8:2]

list 슬라이싱과 array 슬라이싱의 차이점

배열에 10의 값을 넣어주면 리스트는 인덱싱 값이 잘리고 array는 10의 값들이 들어 간다.

2차원 array 인덱싱 & 슬라이싱¶

인덱싱 : [행값, 열값]
슬라이싱 : [행의 시작 값:행의 끝 값 , 열의 시작 값:열의 끝 값]

arr2=np.arange(1,51).reshape(5,10)

profile
제가 한 번 해보겠습니다.

0개의 댓글