본문 바로가기

머신러닝/[논문으로 짚어보는 딥러닝의 맥]

[실습] 기본 파이썬 문법 실습

코드

#Rank

a = np.array([[1,2,3],[2,3,4]])

row_r1 = a[1, :]	# [2,3,4]  , rank=1
row_r2 = a[1:2, :]	# [[2,3,4]], rank=2
row_r3 = a[[1], :]	# [[2,3,4]], rank=2

 세 개의 코드의 출력은 모두 비슷하게 생겼으나, 값을 명시해주는 것에 따라 출력물의 랭크(차원)이 달라진다.

#Rank

x = np.array([[0,1], [2,3]], dtype=np.int)
print(x) # [[0,1], [2,3]

z = x
print(z) # [[0,1], [2,3]]

z[0,0] = 100
print(z) # [[100,1], [2,3]]
print(x) # [[100,1], [2,3]]

파이썬은 기본적으로 call by reference이기 때문에 이런 원치않는 상황이 발생한다.

#np.empty_like, np.copy

x = np.array([[0,1], [2,3]])
print(x) # [[0,1], [2,3]

z = np.empty_like(x)
#z = np.copy(x)
print(z) # [[0,1], [2,3]]

z[0,0] = 100
print(z) # [[100,1], [2,3]]
print(x) # [[0,1], [2,3]]

때문에 np.empty_like 또는 np.copy 함수를 사용하여 해결할 수 있다.

#np.empty, np.empty

x = np.array([[0,1], [2,3]], dtype=np.int)
print(x, '\n') # [[0,1], [2,3]

z = np.empty_like(x)  #배열을 인풋으로, 쓰레기 값을 채워 배열 생성
print(z, '\n') # [[?,?], [?,?]]

x = np.empty(x.shape) #쉐잎을 인풋으로, 쓰레기 값을 채워 배열 생성
print(x, '\n') # [[?,?], [?,?]]

np.copy는 실제 배열값을 복사하는 것이지만, np.empty, np_empty는 쓰레기 값으로 채운, 같은 쉐잎의 배열을 생성

#np.tile function

v = np.array([0,1,2,3])
print(v) # [0,1,2,3]

w = np.tile(v, (1,3))
print(w) # [[0,1,2,3,0,1,2,3,0,1,2,3]]

w = np.tile(v, (2,3))
print(w) # [[0 1 2 3 0 1 2 3 0 1 2 3], [0 1 2 3 0 1 2 3 0 1 2 3]]

np.tile을 이용해 반복적인 배열 생성

#plt.plot function

x = np.arange(0, 3*np.pi, 0.1)
y = np.sin(x)
print(x, '\n')
print(y, '\n')

plt.plot(x,y)
plt.show()

가장 기본적인 플로팅

#이외 꾸미기

y_sin = np.sin(x)
y_cos = np.cos(x)

plt.plot(x, y_sin)
plt.plot(x, y_cos)
plt.xlabel('x axis label')    #x축 레이블
plt.ylabel('y axis label')    #y축 레이블
plt.title('Sine and Cosine')  #그래프 제목 
plt.legend(['Sine', 'Cosine'])#범례. 순서대로 입력
plt.show()

그 밖에 꾸밈코드

#plt.subplot function

x = np.arange(0, 3*np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)

plt.subplot(2, 1, 1)
plt.plot(x, y_sin)
plt.title('Sine')

plt.subplot(2, 1, 2)
plt.plot(x, y_cos)
plt.title('Cosine')

plt.subplots_adjust(hspace=0.5, wspace=0.2) #플롯간 간격 조절. title 겹침 문제 해결

plt.show()

plt.subplot을 활용한 서브플로팅