59doit
[Python-Numpy] #3 본문
반응형
import numpy as np
유니버설함수
arr = np.arange(10)
arr
# <출력> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- 단항 유니버설 함수
np.sqrt(arr)
# <출력>
# array([0. , 1. , 1.41421356, 1.73205081, 2. ,
# 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])
np.exp(arr)
# <출력>
# array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
# 5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
# 2.98095799e+03, 8.10308393e+03])
np.exp(1)
# <출력> 2.718281828459045
- 이항 유니버설 함수
x = np.random.randn(8)
y = np.random.randn(8)
x
# <출력>
# array([-0.92636774, -1.03234076, 0.88873568, -2.62295015,
# -0.06574232, -0.73575235, 1.52419632, -0.54659848])
y
# <출력>
# array([-0.86323147, 1.42525731, 0.95813418, 1.06844799,
# -0.80584912, 0.87617239, 0.69338792, -0.33904493])
np.maximum(x, y)
# <출력>
# array([-0.86323147, 1.42525731, 0.95813418, 1.06844799,
# -0.06574232, 0.87617239, 1.52419632, -0.33904493])
▷
여러개의 배열을 반환하는 유니버설 함수
modf 는 파이썬 내장 함수인 divmod 의 벡터화 버전. 분수를 받아서 몫과 나머지를 함께 반환
arr = np.random.randn(7) * 5
arr
# <출력>
# array([-4.61559807, -6.27729483, -2.73862412, -1.6747488 ,
# 1.84579876, -3.88012698, -6.65983194])
remainder, whole_part = np.modf(arr)
remainder
# <출력>
# array([-0.61559807, -0.27729483, -0.73862412, -0.6747488 ,
# 0.84579876, -0.88012698, -0.65983194])
whole_part
# <출력> array([-4., -6., -2., -1., 1., -3., -6.])
- remainde
- whole_part.
▷
선택적으로 out 인자 사용하여 계산 결과를 별도 저장
arr
# <출력>
# array([-3.06515156, -2.37130948, 1.29910599, 8.06321282,
# 5.04210424, 2.07303572, 1.19492223])
np.sqrt(arr)
# <출력>
# <input>:1: RuntimeWarning: invalid value encountered in sqrt
# array([ nan, nan, 1.13978331, 2.83957969,
# 2.24546303, 1.43980405, 1.09312498])
np.sqrt(arr, arr) #SQRT arr결과값을 arr에 저장
# <input>:1: RuntimeWarning: invalid value encountered in sqrt
# array([ nan, nan, 1.13978331, 2.83957969,
# 2.24546303, 1.43980405, 1.09312498])
<input>:1: RuntimeWarning: invalid value encountered in sqrt
: 음수값은 sqrt 계산이 안되서 warning이 뜨지만 nan값으로 반환된다
▷
값이 놓여 있는 그리드에서 sqrt(x^2 + y^2)를 계산
points = np.arange(-5, 5, 0.01) # 1000 equally spaced points
xs, ys = np.meshgrid(points, points)
ys
xs
np.meshgrid 함수는 두개의 1 차원 배열을 받아서 가능한 모든 (x, y)짝을 만들 수 있는 2 차원 배열 두개를 반환
▷
그리드 상의 두 포인트로 간단하게 계산 적용 가능
z = np.sqrt(xs ** 2 + ys ** 2)
z
matplotlib : 파이썬을 이용한 데이터 시각화
import matplotlib.pyplot as plt
▼
plt.imshow(z, cmap=plt.cm.gray); plt.colorbar()
▼
▼
plt.title("Image plot of $\sqrt{x^2 + y^2}$ for a grid of values")
▼
plt.draw()
re-draw. interactive mode 에서 data 나 format 을 바꾸어야 할 때 사용
plt.close('all')
▷
np.where
- cond 값이 True 일때 xarr / False > yarr
xarr = np.array ([1.1,1.2,1.3,1.4,1.5])
yarr = np.array([2.1,2.2,2.3,2.4,2.5])
cond = np.array ([True,False,True,True,False])
result = [(x if c else y) for x, y, c in zip(xarr,yarr,cond)]
result
# <출력> [1.1, 2.2, 1.3, 1.4, 2.5]
- 활용
result = np.where(cond,xarr,yarr)
result
# <출력> [1.1, 2.2, 1.3, 1.4, 2.5]
- where 은 다른 배열에 기반한 새로운 배열을 생성
arr = np.random.randn(4, 4)
arr
# <출력>
# array([[ 0.20343263, -1.24549135, 0.04353215, 1.76619998],
# [ 0.24949921, 1.54354193, -0.39978553, 0.02376734],
# [ 1.38698041, -0.32689699, 0.18724001, 0.41467767],
# [ 0.40090677, -0.19479791, 0.40132263, -0.34850082]])
arr > 0
# <출력>
# array([[ True, False, True, True],
# [ True, True, False, True],
# [ True, False, True, True],
# [ True, False, True, False]])
np.where(arr > 0, 2, -2)
# <출력> array([[ 2, -2, 2, 2],
# [ 2, 2, -2, 2],
# [ 2, -2, 2, 2],
# [ 2, -2, 2, -2]])
- arr 의 모든 양수를 2 로 바꿈
arr
# <출력>
# array([[ 0.20343263, -1.24549135, 0.04353215, 1.76619998],
# [ 0.24949921, 1.54354193, -0.39978553, 0.02376734],
# [ 1.38698041, -0.32689699, 0.18724001, 0.41467767],
# [ 0.40090677, -0.19479791, 0.40132263, -0.34850082]])
np.where(arr > 0, 2, arr)
# <출력>
# array([[ 2. , -1.24549135, 2. , 2. ],
# [ 2. , 2. , -0.39978553, 2. ],
# [ 2. , -0.32689699, 2. , 2. ],
# [ 2. , -0.19479791, 2. , -0.34850082]])
arr
#<출력>
# array([[ 0.20343263, -1.24549135, 0.04353215, 1.76619998],
# [ 0.24949921, 1.54354193, -0.39978553, 0.02376734],
# [ 1.38698041, -0.32689699, 0.18724001, 0.41467767],
# [ 0.40090677, -0.19479791, 0.40132263, -0.34850082]])
np.where => 원본이 바뀌진않음 처음 불러왔던arr = np.random.randn(4, 4) 가 결과값으로 나온다.
반응형
'Programming > Python(파이썬)' 카테고리의 다른 글
[Python-Pandas] #1 (2) | 2022.11.07 |
---|---|
[Python-Numpy] #4 (0) | 2022.11.06 |
[Python-Numpy] #2 (2) | 2022.11.06 |
[Python-Numpy] #1 (0) | 2022.11.06 |
[Python] os 모듈 파일 디렉터리 관련함수 (0) | 2022.11.04 |
Comments