연산 함수 | 설명 | 연산 함수 | 설명 |
---|
square() | 제곱 | mean() | 평균 |
sqrt() | 제곱근(루트) | var() | 편차 |
exp() | 지수승 | std() | 표준편차 |
log() | 로그 | min() | 최소값 |
add() | 덧셈 | max() | 최대값 |
sum() | 합계 | argmin() | 최소값의 인덱스 |
cumsum() | 누적합 | argmax() | 최대값의 인덱스 |
import numpy as np
"""
배열은 빠르고 간단하게 연산을 처리 할 수 있다.
NumPy는 데이터를 연속된 메모리블럭에 저장하고, 일반적인 파이썬 자료형보다 더 적은 메모리를 사용한다.
또한 내부 연산은 C 언어로 작성되어 메모리를 직접 조작해 처리하기 때문에 배열을 빠르고 효율적으로 처리 할 수 있다.
리스트에서 연산을 수행하기 위해서는 for 문과 같은 반복문을 사용해서 아이템을 하나씩 꺼내서 처리하고 넣는 형태로 진행해야 한다.
배열은 이러한 과정 없이 모든 아이템에 한꺼번에 연산을 적용할 수 있다.
바로 이러한 이유가 numpy 패키지가 데이터 처리에 강력한 이유기도 하다.
"""
"""
가장 기본적인 배열은 np.array() 함수를 사용해서 만든다.
"""
list = [1,2,3]
array = np.array(list)
array
array([1, 2, 3])
"""
값을 하나씩 지정하지 않고, np.zeros()를 사용하여 0으로 초기화된 배열을 만들 수 있다.
"""
np.zeros(5)
array([0., 0., 0., 0., 0.])
"""
튜플을 사용해 0으로 초기화된 2차원 배열을 생성
"""
np.zeros((2,3))
array([[0., 0., 0.],
[0., 0., 0.]])
"""
1로 초기화된 배열 생성
"""
np.ones(7)
array([1., 1., 1., 1., 1., 1., 1.])
"""
빈 배열 생성하기
단, empty는 데이터의 초기화 없이 배열을 생성한다. 그렇기 때문에 zeros, ones보다
배열을 생성하는 속도는 빠르지만, 의미없는 쓰레기 값으로 채워져 있기 때문에 사용시 유의
"""
print(np.empty(5))
[2.5e-323 3.0e-323 3.5e-323 4.0e-323 4.4e-323]
"""
파이썬 기본 내장 함수인 range와 유사하게 연속된 숫자를 채워서 배열을 만들기
"""
print(np.arange(10))
print(np.arange(20,30,2))
[0 1 2 3 4 5 6 7 8 9]
[20 22 24 26 28]
"""
랜덤값으로 배열 만들기
rand ::: 균등분포에서 랜덤 추출
randint ::: 주어진 범위 안에서 랜덤 추출
randn ::: 표준정규분포(평균이 0이고, 표준편차가 1인 정규분포)에서 랜덤 추출
normal ::: 정규분포에서 랜덤 추출
seed ::: 랜덤값 생성기의 시드 지정 (정해진 시드값에 따라 난수를 생성)
shuffle ::: 리스트나 배열의 순서를 섞음 (실무에 사용가능할듯)
"""
np.random.rand(2,3)
array([[0.1853592 , 0.67315673, 0.91549164],
[0.18491776, 0.83095126, 0.85583572]])
"""
만들어진 배열의 차원을 변경해서 재정의 하기
"""
array = np.arange(16)
print(array)
print(array.reshape(4,4))
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
"""
배열안에 담긴 데이터 처리
shape ::: 배열의 형태 확인
dtype ::: 배열의 데이터 타입 확인
astype() ::: 배열의 데이터 타입 변경
"""
array = np.arange(16)
print(array)
print(array.shape)
print(array.dtype)
print(array.astype(float))
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
(16,)
int64
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.]
"""
Boolean Index
특정 조건에 해당하는 부분만 배열화 하기
"""
array = np.array([50,20,40,60,70])
print(array)
print(array >= 50)
print(array[array >= 50])
[50 20 40 60 70]
[ True False False True True]
[50 60 70]
"""
NumPy 배열 연산하기
"""
array = np.arange(1,5)
print(array)
print(array + 2)
print(array * 2)
array2 = np.arange(1,5)
print(array2)
print(array + array2)
"""
단순 List의 경우 연산처리가 안됨
"""
list = [1,2,3,4]
print(list)
print(list * 2)
[1 2 3 4]
[3 4 5 6]
[2 4 6 8]
[1 2 3 4]
[2 4 6 8]
[1, 2, 3, 4]
[1, 2, 3, 4, 1, 2, 3, 4]
"""
NumPy 배열 통계용 연산
"""
array = np.arange(1,5)
print(np.square(array))
print(np.sqrt(array))
print(np.exp(array))
print(np.log(array))
print(np.add(array, np.arange(5,9)))
print(np.sum(array))
print(np.cumsum(array))
print(np.mean(array))
print(np.var(array))
print(np.std(array))
print(np.min(array))
print(np.max(array))
print(np.argmin(array))
print(np.argmax(array))
[ 1 4 9 16]
[1. 1.41421356 1.73205081 2. ]
[ 2.71828183 7.3890561 20.08553692 54.59815003]
[0. 0.69314718 1.09861229 1.38629436]
[ 6 8 10 12]
10
[ 1 3 6 10]
2.5
1.25
1.118033988749895
1
4
0
3
"""
배열 차원 변형
"""
print(np.arange(10))
print(np.arange(10).reshape(2,5))
print(np.arange(10).reshape(2,5).transpose())
print(np.arange(10).reshape(2,5).T)
print('-------------------------')
print(np.arange(27))
print(np.arange(27).reshape(3,3,3))
print('-------------------------')
print(np.arange(27).reshape(3,3,3).transpose())
print('-------------------------')
print(np.arange(27).reshape(3,3,3).transpose(1,0,2))
print('-------------------------')
print(np.load('shape_array.npy'))
[0 1 2 3 4 5 6 7 8 9]
[[0 1 2 3 4]
[5 6 7 8 9]]
[[0 5]
[1 6]
[2 7]
[3 8]
[4 9]]
[[0 5]
[1 6]
[2 7]
[3 8]
[4 9]]
-------------------------
[ 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]
[[[ 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]]]
-------------------------
[[[ 0 9 18]
[ 3 12 21]
[ 6 15 24]]
[[ 1 10 19]
[ 4 13 22]
[ 7 16 25]]
[[ 2 11 20]
[ 5 14 23]
[ 8 17 26]]]
-------------------------
[[[ 0 1 2]
[ 9 10 11]
[18 19 20]]
[[ 3 4 5]
[12 13 14]
[21 22 23]]
[[ 6 7 8]
[15 16 17]
[24 25 26]]]
-------------------------
[[[ 0 1 2]
[ 9 10 11]
[18 19 20]]
[[ 3 4 5]
[12 13 14]
[21 22 23]]
[[ 6 7 8]
[15 16 17]
[24 25 26]]]