본문 바로가기

Programming/Python

Numpy

# None : 파이썬의 Null

# 아나콘다 설치 : Python, Numpy, Pandas, Matplolib 모두 포함

# 인공지능
# 머신러닝(학습하는 AI)
# 딥러닝(사람의 뇌 구조를 모방)


# 모듈 - 함수들의 모음
# Numpy - 기본 베이스 모듈, Pandas, Matplolib 내부에서도 쓰이는 모듈
#         고성능 과학계산을 위한 데이터 분석 라이브러리 
# Pandas - 모듈
#          행과 열로 구성된 표 형식의 데이터를 지원하는 라이브러리(엑셀모양)
# Matplolib - 모듈
#             2D 그래프로 시각화가 가능한 라이브러리




# Numpy 주요기능
# 1. 빠르고 효율적인 벡터 산술연산을 제공하는 다차원배열 제공 (ndarray 클래스)
#    ndArray (; N dimensional Array - 모든 차원을 다루는 Array)

# 2. 반복문 없이 전체 데이터 배열 연산이 가능한 표준 수학 함수 (sum(), sqrt(), mean())

# 3. 선형대수, 난수 생성, 푸리에 변환



# numpy : 기본 타입 float (타입 변경 .astype('int64') 필요)
# numpy 배열 안에는 타입 1가지만 들어감(다른 타입 들어가면 1가지로 바뀜)
# numpy가 수학 연산이 빠름
# 수학 연산 기능을 많이 제공

# list의 덧셈 연산 : 두 리스트의 요소를 합
# numpy.array의 덧셈 연산 : 두 배열의 요소들의 합
# list는 Boolean Indexing이 안되, numpy.array로 변환해야 인덱싱, 슬라이싱을 할 수 있음
# numpy는 다차원 배열의 연산, 인덱싱, 슬라이싱을 위해 사용




# Numpy 모듈(라이브러리) 가져오기
# import numpy as np




# 1차원 배열 형태 numpy.ndarray클래스
# 1. 동일한 자료형의 값(배열 형태)
# 2. N 차원 형태
# 3. Index, Value
# 4. ndarray를 줄여서 array로 표현


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


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




# 2차원 배열 형태 numpy.ndarray 클래스


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



# 이미지데이터 : 3차원 데이터셋, RGB표현
# 영상데이터 : 4차원 데이터셋









# .shape : (행, 열) 확인
arr.shape
# (5,)

arr2.shape
# (2, 3)





# .size : 개수 확인
arr.size
# 5

arr2.size
# 6




# .ndim : 차원 확인
arr.ndim
# 1

arr2.ndim
# 2




# .dtype : 배열 타입 확인
arr.dtype
# dtype('int32')


# int32 작은 정수
# int64 큰 정수

print(arr.dtype)
# int32





# 3차원 배열 예제
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
arr
# array([[[1, 2],
#         [3, 4]], 
#         [[5, 6],
#         [7, 8]]])

print('배열의 크기 : ', arr.shape)
print('배열의 차원 : ', arr.ndim)
print('배열의 개수 : ', arr.size)
# 배열의 크기 : (2, 2, 2)
# 배열의 차원 : 3
# 배열의 개수 : 8









# 초기화 0값
arr_zeros = np.zeros((3, 4))
arr_zeros
# 출력 값 : array([[0., 0., 0., 0.],
#                  [0., 0., 0., 0.],
#                  [0., 0., 0., 0.]])

# 초기화 1값
arr_ones = np.ones((3, 4))
arr_ones
# 출력 값 : array([[1., 1., 1., 1.],
#                  [1., 1., 1., 1.],
#                  [1., 1., 1., 1.]])

# 초기화 지정값
arr_full = np.full((5, 5), 7)
arr_full
# 출력 값 : array([[7, 7, 7, 7, 7],
#                  [7, 7, 7, 7, 7],
#                  [7, 7, 7, 7, 7],
#                  [7, 7, 7, 7, 7],
#                  [7, 7, 7, 7, 7]])






# 나열 : for 반복으로 리스트요소 추가
list= []
for i in range(1, 51, 1) :
    list.append(i)
print(list)
# [ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
#  18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
#  35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]

arr= np.array(list)


# 나열 : np.arange( , )
arr = np.arange(1, 51)
arr
# array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
#        18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
#        35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50])


# 간격지정 나열
arr = np.arange(1, 51, 10)
arr
# array([ 1, 11, 21, 31, 41])








# 자료형 변환
arr_type = np.array( [1.2, 2.3, 3.4], dtype = np.int64 )
arr_type
# array([1, 2, 3], dtype=int64)


arr_type = arr_type.astype("float64")
arr_type
# array([1., 2., 3.])








# 난수
arr = np.random.rand(2, 3)
arr
# array([[0.97295258, 0.28920363, 0.60553082],
#        [0.12686029, 0.18115635, 0.00319909]])


# random seed를 지정하여 매번 같은 난수 생성
np.random.seed(1)
np.random. randint(1, 5, 6)
# array([2, 4, 1, 1, 4, 2])


# 랜덤값 범위지정하여 난수 생성
arr = np.random.randint(2, 10)
arr
# 2


arr = np.random.randint(2, 10, size = (2, 3))
arr
# array([[6, 3, 5],
#        [4, 6, 2]])







# 배열의 요소 합
arr = np.array([1, 2, 3])
arr
# array([1, 2, 3])

arr + arr
# array([2, 4, 6])

arr * arr
# array([1, 4, 9])

arr = np.arange(2, 10, 2)
print(arr)
print(arr / 2.0)
# [2 4 6 8]
# [1. 2. 3. 4.]






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


print(arr[0][0])
# [1 2 3]


print(arr[0,0])
# 1




# Slicing
arr1 = np.arange(10)
arr1
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])


arr1[3:8]
# array([3, 4, 5, 6, 7])


arr1[3:8] = 12
arr1
# array([ 0,  1,  2, 12, 12, 12, 12, 12,  8,  9])







# delimiter : 구분자


# BMI 구하기
data = np.loadtxt("data/height_weight.txt", delimiter = ",")
data

height = data[0] / 100
weight = data[1]

BMI = weight / height**2
BMI
# 출력 값 : array([21.37153104, 27.07018468, 25.86122449, 24.20652885, 16.03543423,
                   20.14486193, 23.14392095, 21.69720651, 23.62028791, 25.59220998])

# 제곱 계산
# **2
# np.square()









# 행, 열 크기 지정 2차원 array생성
arr2 = np.arange(50).reshape(5, 10)
arr2
# array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
#        [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
#        [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
#        [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
#        [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])


arr2 = np.arange(50).reshape(5, -1)
arr2
# array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
#        [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
#        [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
#        [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
#        [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])




# 2차원 array Indexing
arr2[[2,3], [4, 6]]
# array([24, 36])




# 2차원 array Slicing
arr2[3:4, 3:8]
# array([[33, 34, 35, 36, 37]])



arr = np.arange(18).reshape(3, -1)
arr
# array([[ 0,  1,  2,  3,  4,  5],
#        [ 6,  7,  8,  9, 10, 11],
#        [12, 13, 14, 15, 16, 17]])

arr[1:,[1,3,5]]
# array([[ 7,  9, 11],
         [13, 15, 17]])






# Boolean Indexing
name_score = np.array(np.random.randint(50, 100, size = 8)
name_socre
# array([68, 57, 81, 52, 76, 88, 71, 88])


name_score >= 80
# array([False, False, True, False, False, True, False, True])


name_score[name_score >= 80]
# array([81, 88, 88])





# Universally 함수
print(name_score.sum())
print(np.sum(name_score))
print(np.mean(name_score))
print(np.mean(name_score))
print(np.sqrt(name_score))
print(np.abs(name_score))
# 581
# 581
# 72.625
# 72.625
# [8.24621125 7.54983444 9.         7.21110255 8.71779789 9.38083152
# 8.42614977 9.38083152]
# [68 57 81 52 76 88 71 88]

'Programming > Python' 카테고리의 다른 글

영화평점 분석하기  (0) 2020.03.09
Pandas  (0) 2020.03.09
JupyterNotebook 설치  (0) 2020.03.09
함수  (0) 2020.03.09
반복문  (0) 2020.03.09