[패스트캠퍼스_권장] 기초 3교시 - 2

HoRi·2022년 12월 30일
0

FastCampus_WorkSheet

목록 보기
5/5

권장 강의 3교시 : 데이터분석 기초 - 2


Numpy(Numerical Python)

  • 배열(Array)을 다루는 파이썬 라이브러리
  • 머신러닝 연산과정에서 필수적
  • 오픈소스 프로젝트이며, 무료 사용 가능

import numpy as np

보통 다음과 같이 사용하며 numpy를 np로 줄여서 사용


Numpy array

1차원 Numpy array : Vector

# numpy array 만들기 - 1차원
arr = np.array([1, 2, 3, 4, 5])

print(arr)				# 출력 결과 >> [1 2 3 4 5]
print(type(arr))		# 출력 결과 >> <class 'numpy.ndarray'>

2차원 Numpy array : Matrix

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

print(arr2)		# 출력 결과 >> [[1 2 3]
				#			   [4 5 6]]

3차원 Numpy array : Tensor

# 3차원 numpy array
arr3 = np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]])

print(arr3)		# 출력 결과 >> [[[1 2 3]
				#              [4 5 6]]
				#
				#             [[1 2 3]
  				#             [4 5 6]]]

Array Indexing

  • array에서는 index number를 참조함으로써 요소(element)에 접근이 가능
  • 첫 번째 요소는 0에서부터 시작
arr = np.array([1, 2, 3, 4])

print(arr[0])				# 출력 결과 >> 1
print(arr[1])				# 출력 결과 >> 2
print(arr[2] + arr[3])		# 출력 결과 >> 7

Negative Indexing

  • '-'를 붙여 뒤에서부터 인덱스 번호를 매겨서도 요소에 접근이 가능
# negative indexing
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])

print('2번째 차원의 마지막 개체 : ', arr[1, -1])
# 출력 결과 >> 10

Array Slicing

  • 주어진 index 범위에서 요소를 가져오는 것
  • 슬라이싱의 형태는 [start:end] 또는 [start:end:step], end-1번째까지 포함
  • step이 생략된 경우엔 기본값은 1
  • start 또는 end 값이 없는 경우 인덱스의 처음부터 시작하거나 마지막 개체까지로 간주함
  • Negative Indexing과 같이 Negative Slicing도 존재하며 유사한 기능을 가짐
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

print(arr[1:5])			# 출력 결과 >> [2 3 4 5]
print(arr[1:5:2])		# 출력 결과 >> [2 4]
print(arr[:3])			# 출력 결과 >> [1 2 3]
print(arr[5:])			# 출력 결과 >> [6 7 8 9 10]
print(arr[-4:-1])		# 출력 결과 >> [7 8 9]

2차원 Array Slicing

# 2차원 array slicing - 두 번째 요소에서 index 1부터 2까지 반환
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])

print(arr[1, 1:3])		# 출력 결과 >> [7 8]

# 2차원 array slicing - 각 요소에서 index 2의 요소 반환
print(arr[0:2, 2])		# 출력 결과 >> [3 8]

# 2차원 array slicing - 각 요소에서 index 1부터 3까지의 요소 반환
print(arr[0:2, 1:4])	# 출력 결과 >> [[2 3 4]
						#              [7 8 9]]

arr.ndim >> ndim은 (numpy)dimension으로 arr의 차원 확인
arr = np.array([1, 2, 3, 4], ndmin=5) >> arr을 ndmin을 사용해 5차원으로 만듦


Numpy 데이터 타입

i : integer
b : boolean
u : unsigned integer
f : float
c : comples float
m : timedelta
M : datetime
O : object
S : string
U : unicode string
V - fixed chunk of memory for other type(void)

데이터 타입 확인

# 데이터타입 확인 - 정수
arr = np.array([1, 2, 3, 4, 5])

print(arr.dtype)		# 출력 결과 >> int64

# 데이터타입 확인 - 문자
arr = np.array(['아이폰', '아이패드', '애플워치', '에어팟 맥스'])

print(arr.dtype)		# 출력 결과 >> <U6			6글자 이하의 유니코드를 의미

데이터 타입 지정하기

# array 생성 시 데이터타입 지정하기 - 4비트 integer로 지정
arr = np.array([1, 2, 3, 4, 5], dtype='i4')		# dtype='i4'을 사용해서 4비트 integer로 만들어줌

print(arr)
print(arr.dtype)

# array 생성 시 데이터타입 지정하기 - String으로 지정
arr = np.array([1, 2, 3, 4, 5], dtype='S')		# dtype='S'를 사용해서 String으로 만들어줌

print(arr)
print(arr.dtype)

Array Reshape

  • reshape()을 사용해 numpy array 모양을 바꿀 수 있음
# 1차원에서 3차원으로 변환
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(2, 3, 2)

print(newarr)
# 출력 결과
# [[[1 2]
#   [3 4]
#   [5 6]
#
#  [[7 8]
#   [9 10]
#   [11 12]]]
  • reshape(-1)을 사용해 다차원(multidimensional)의 array를 1차원 array로 바꿀 수 있음(차원축소)
# Flattening
arr = np.array([[1, 2, 3], [4, 5, 6]])
newarr = arr.reshape(-1)

print(newarr)
# 출력 결과 >> [1 2 3 4 5 6]

Array Iterating

  • 배열에서의 반복(iterating)은 for문을 사용해 요소에 하나씩 접근하는 것을 말함
# 1차원 배열에서의 반복
arr = np.array([1, 2, 3])

for x in arr:
	print(x)
# 출력 결과
# 1
# 2
# 3

# 2차원 배열에서의 반복 - 1
arr = np.array([[1, 2], [3, 4]])

for x in arr:
	print(x)
# 출력 결과
# [1 2]
# [3 4]

# 2차원 배열에서의 반복 - 2
for x in arr:
	for y in x:
    	print(y)
# 출력 결과
# 1
# 2
# 3
# 4

Join

  • 여러 개의 배열을 하나로 연결시켜줌
# concatenate()을 사용해 여러 개의 1차원 array를 연결해보자
arr1 = np.array([1, 2])
arr2 = np.array([3, 4])
arr = np.concatenate((arr1, arr2))

print(arr)	# 출력 결과 >> [1 2 3 4]

# 2차원의 array를 axis=1 기준으로 연결해보자
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr = np.concatenate((arr1, arr2), axis=1)

print(arr)
# 출력 결과
# [[1 2 5 6]
#  [3 4 7 8]]

Split

  • 하나의 배열을 여러 개로 쪼갬
# array_split()을 사용해 하나의 array를 3개로 만들어보자
arr = np.array([1, 2, 3, 4, 5, 6])
newarr = np.array_split(arr, 3)

print(newarr)	# 출력 결과 >> [array([1, 2]), array([3, 4]), array([5, 6])]

이외에도 search(), sort(), filter() 함수가 있음

profile
무지성 작성소

0개의 댓글