2021/12/29/WED
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
height=4
width=5
depth=3
m=np.zeros((height,width,depth))
m
- 4개의 row와 5개의 column 3개의 depth(각 column의)
- 보기엔 그렇게 안 보이지만 첫 번째 블록을 쭉 펼치면 그게 1행인 거고(이런 행이 총 4개) 그 안에 5개의 열이 있고 한 열당 깊이가 3개다
- 다음 사진을 참고하자
- ref
plt.imshow(m)
plt.grid()
- 이미지의 시작은 좌측 상단임
m[:,:,0]=255
plt.imshow(m)
plt.grid()
m
m=np.zeros((height,width,depth))
m[:,:,1]=255
plt.imshow(m)
plt.grid()
m
m=np.zeros((height,width,depth))
m[:,:,2]=255
plt.imshow(m)
plt.grid()
m
m=np.ones((height,width,depth))
plt.imshow(m)
plt.grid()
m
m=np.zeros((height,width,depth))
plt.imshow(m)
plt.grid()
m=np.zeros((height,width,depth))
m[0,:,:]=255
plt.imshow(m)
plt.grid()
m
m=np.zeros((height,width,depth))
m[0,0,:]=255
plt.imshow(m)
plt.grid()
m
# 1행 1열의 RGB를 모두 255 = 그래서 흰색이 나옴
m=np.zeros((height,width,depth))
m[0,0,1]=255
plt.imshow(m)
plt.grid()
m=np.zeros((height,width,depth))
m[0,0,2]=255
plt.imshow(m)
plt.grid()
m=np.zeros((height,width,depth))
m[0,0,0]=255
plt.imshow(m)
plt.grid()
m=np.zeros((height,width,depth))
plt.imshow(m)
plt.grid()
m=np.zeros((height,width,depth))
m[:,0,1]=255
plt.imshow(m)
plt.grid()
m
m[:,-2,2]=255
plt.imshow(m)
plt.grid()
m
m[2,:,0]=255
m[2,:,1]=255
m[2,:,2]=0
plt.imshow(m)
plt.grid()
# R+G=노랑색
- 이미지를 세로로 두배 늘려보자
m_vt=np.vstack([m,m])
plt.imshow(m_vt)
plt.grid()
- 이미지를 가로로 두배 늘려보자
m_hz=np.hstack([m,m])
plt.imshow(m_hz)
어둡게 해보자
m_hz
m_hz=(m_hz/255)*0.5
plt.imshow(m_hz)
m_hz
m=np.zeros((5,5,3))
plt.imshow(m)
m[:,:,:]=1
plt.imshow(m)
m[:,:,:]=0
plt.imshow(m)
m[0::2,0::2,:]=1
plt.imshow(m)
m[1::2,1::2,:]=1
plt.imshow(m)
- 논리 연산을 사용해서 체크 무늬 만들어보자
n = m.copy()
idx=np.where(n==1)
n[idx]=0.5
plt.imshow(n)
# 흰 부분만 어둡게 된 것을 알 수 있다.
idx=np.where(n==0)
n[idx]=1
plt.imshow(n)
# 검정색 부분만 흰색으로 만들어줌
n=m.copy()
plt.imshow(n)
- 컬러 뒤집기
idx1=np.where(n==1)
idx2=np.where(n==0)
n[idx1]=0
n[idx2]=1
plt.imshow(n)
a=np.where(n==1)
n[a[0],a[1],0]=0
n[a[0],a[1],2]=0
plt.imshow(n)
a
a[0]
a[1]
- 즉, a[0],a[1]은 각각 값이 1인 부분의 행 인덱싱 열 인덱싱을 의미함
plt.imshow(n)
- 검정색 부분만 빨강으로 바꾸기
flag_r=(n[:,:,0]==0)
flag_g=(n[:,:,1]==0)
flag_b=(n[:,:,2]==0)
flag_blk= flag_r&flag_g&flag_b
idx_blk=np.where(flag_blk==True)
n[idx_blk[0],idx_blk[1],0]=1
plt.imshow(n)
n=m.copy()
plt.imshow(n)
n
print(np.sum(n,axis=0))
print(np.sum(n,axis=1))
print(np.sum(n,axis=2))
- np.sum(n,aixs=?)
- 해당 링크를 참조해보자
np_sum=np.sum(n,axis=2) # 색 찾기
idx_blk=np.where(np_sum==0) # 검정색인 부분만 찾는다.
n[idx_blk[0],idx_blk[1],0]=1 # idx_blk[0],idx_blk[1] => 해당 위치를 알 수 있음
plt.imshow(n)
np.fill_diagonal(n[:,:,0],0)
np.fill_diagonal(n[:,:,1],1)
np.fill_diagonal(n[:,:,2],0)
plt.imshow(n)
m=np.linspace(0,1,10) # 1차원
m=m[:,np.newaxis] # 2차원
m=np.repeat(m,10,axis=1)
plt.imshow(m,cmap='gray')
m
m_tr=np.transpose(m)
plt.imshow(m_tr,cmap='gray')
m_tr=np.transpose(m)
plt.imshow(m_tr,cmap='jet')
LaTex 이용해보자
$ \begin{align} \begin{cases} f(x) = \frac{1}{10}x^2 & \text{ for } x\in [0,1.5) \\ f(x) = \sum_{n=1,3,5..}^{N}{\frac{4}{\pi n} \text{sin}(\frac{2\pi n(x-1.5)}{T})}& \text{for} \in[1.5,3] \end{cases} \end{align} $
$\to$ 분할함수(Piecewise Function)
x1=np.arange(0,1.5,0.0001)
y1=1/10*x1**2
x2=np.arange(1.5,3+0.01,0.0001)
n= 5000
t=1
y2=np.zeros(x2.shape)
for n in range(n):
if n%2==1:
series = 4/(np.pi*n)*np.sin((2*np.pi*n*(x2-1.5))/t)
y2=y2+series
n이 커질수록 합이 커짐
plt.plot(x1,y1)
plt.plot(x2,y2)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Piecewise Functions')
세계 온도 변화 시각화
import scipy
import scipy.interpolate as interp
import gzip
import pickle as pkl
file=gzip.GzipFile('GlobalTemperatureData.pkl.gz','rb')
df=pkl.load(file)
file.close
df.keys()
연도별로 세계온도가 들어가있음
yr=list(df.keys())
iyr=10
df_yr=df[yr[iyr]]
df_yr
df_yr.keys()
위도, 경도, 온도만 발췌하여 numpy_array로 변형해보자
원래는 dict 형태였음
df_yr[['lon','lat','Temperature(i,j)']]
- to_numpy()
data=df_yr[['lon','lat','Temperature(i,j)']].to_numpy()
data
data[np.where(data>9999)]=np.nan
9999를 nan으로 바꾼 이유는 자동으로 plot이 안 되게 하기 위해서
x=np.linspace(-180,180,100)
y=np.linspace(-90,90,100)
grid_x,grid_y=np.meshgrid(x,y)
data_interp=interp.griddata(data[:,[0,1]],data[:,2],(grid_x,grid_y),method='linear')
hfig,hax=plt.subplots()
im=plt.imread('world_map.png')
plt.imshow(im)
좌표축의 중심을 왼쪽 아래로
그런데 지도까지 뒤집혀버림
hfig,hax=plt.subplots()
im=plt.imread('world_map.png')
plt.imshow(im,origin='lower')
다시 지도만 뒤집어줌
hfig,hax=plt.subplots()
im=plt.imread('world_map.png')
plt.imshow(np.flipud(im),origin='lower')
size 조정
hfig,hax=plt.subplots()
im=plt.imread('world_map.png')
plt.imshow(np.flipud(im),origin='lower',extent=(0,800,0,400))
hfig,hax=plt.subplots()
im=plt.imread('world_map.png')
plt.imshow(np.flipud(im),origin='lower',extent=(-180,180,-90,90))
plt.pcolormesh(grid_x,grid_y,data_interp,cmap='coolwarm',alpha=0.6)
plt.xlim(-180,180)
plt.ylim(-90,90)
plt.title('global temperature change from ty1880 to'+str(yr[iyr]))
plt.xlabel('Altitude')
plt.xlabel('Latitude')
plt.colorbar(fraction=0.022,pad=0.05)
plt.clim(-4,4)