파이썬에서 임의의 정의 영역을 가진 히트 맵을 만드는 방법
13542 단어 파이썬matplotlib
$f=(x,y)$적인 데이터를 나타내기 위해서, 히트 맵 은 강력한 수단입니다.
파이썬에서는
seaborn
가 유명하지만 x와 y의 정의 영역이 각각 1,2,...
로 제한됩니다. 어차피라면 임의의 정의역에서 하고 싶네요. scikitlearn 샘플 코드 를 참고로 한 방법을 해설합니다.불법이지만 모든 기능에 대응할 수있는 사람
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-2,2,0.1)
y = np.arange(-2,2,0.1)
xx,yy = np.meshgrid(x,y)
z = np.zeros((len(x),len(y)))
for i in range(len(x)):
for j in range(len(y)):
v = np.array([xx[i][j],yy[i][j]])
r = np.linalg.norm(v)
z[i][j] = np.exp(-r)
plt.figure(figsize=(5,5))
plt.contourf(x,y,z,cmap='coolwarm')
plt.show()
for문의 내용이 실질적인 $f(x,y)$가 되어 있어, 위의 샘플 코드에서는 예로서,
$$
f(x,y) = e^{\frac{-1}{\sqrt{x^2+y^2}}}
$$
를 구현하고 있습니다. 번잡하기 때문에 세 줄로 나뉘어 있지만, 하는 것은 동일합니다.
이것은 모든 함수에 대응 가능합니다만, for문을 사용하고 있는 것이 아무리도 좋지 않습니다. 무엇보다, 행렬을 1회 걸면 괜찮은 패턴이나, 각종 기계 학습의 예측 모델(대개는 데이터수 x 입력 벡터)의 형태에 대응하고 있지 않기 때문에 불편합니다.
데이터 수 x 입력 벡터의 형태로 수정 된 사람
import numpy as np
import matplotlib.pyplot as plt
def model(xy):
ar = np.array([-2,1])
return np.matmul(xy,ar)
x = np.arange(-2,2,0.1)
y = np.arange(-2,2,0.1)
xx,yy = np.meshgrid(x,y)
xx = xx.reshape(-1,1)
yy = yy.reshape(-1,1)
xy = np.concatenate([xx,yy],1)
z = model(xy)
z = z.reshape(-1,len(x))
plt.figure(figsize=(5,5))
plt.contourf(x,y,z,cmap='coolwarm')
plt.show()
x, y의 형태를 성형하고 있습니다. 그림으로 하면 다음과 같은 느낌입니다.
이 형식이면, 예를 들면 lda.precdict()
이나 model()
(PyTorch 등)의 함수에 대응할 수 있습니다.
덤
contourf
가 아니라 pcolormedh
로 하면 그리드 표시가 됩니다. 외형은 깨끗합니다만, 데이터의 경향은 오히려 알기 어려워지는 생각이 들기 때문에, 개인적으로는 contourf
쪽이 좋아합니다.
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-2,2,0.01) #解像度を0.01に
y = np.arange(-2,2,0.01) #解像度を0.01に
xx,yy = np.meshgrid(x,y)
z = np.zeros((len(x),len(y)))
for i in range(len(x)):
for j in range(len(y)):
v = np.array([xx[i][j],yy[i][j]])
r = np.linalg.norm(v)
z[i][j] = np.exp(-r)
plt.figure(figsize=(5,5))
plt.pcolormesh(x,y,z,cmap='coolwarm') #ここを変更
plt.show()
Reference
이 문제에 관하여(파이썬에서 임의의 정의 영역을 가진 히트 맵을 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hibit/items/71d8874eaf448267c6a3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-2,2,0.1)
y = np.arange(-2,2,0.1)
xx,yy = np.meshgrid(x,y)
z = np.zeros((len(x),len(y)))
for i in range(len(x)):
for j in range(len(y)):
v = np.array([xx[i][j],yy[i][j]])
r = np.linalg.norm(v)
z[i][j] = np.exp(-r)
plt.figure(figsize=(5,5))
plt.contourf(x,y,z,cmap='coolwarm')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
def model(xy):
ar = np.array([-2,1])
return np.matmul(xy,ar)
x = np.arange(-2,2,0.1)
y = np.arange(-2,2,0.1)
xx,yy = np.meshgrid(x,y)
xx = xx.reshape(-1,1)
yy = yy.reshape(-1,1)
xy = np.concatenate([xx,yy],1)
z = model(xy)
z = z.reshape(-1,len(x))
plt.figure(figsize=(5,5))
plt.contourf(x,y,z,cmap='coolwarm')
plt.show()
x, y의 형태를 성형하고 있습니다. 그림으로 하면 다음과 같은 느낌입니다.
이 형식이면, 예를 들면
lda.precdict()
이나 model()
(PyTorch 등)의 함수에 대응할 수 있습니다.덤
contourf
가 아니라 pcolormedh
로 하면 그리드 표시가 됩니다. 외형은 깨끗합니다만, 데이터의 경향은 오히려 알기 어려워지는 생각이 들기 때문에, 개인적으로는 contourf
쪽이 좋아합니다.
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-2,2,0.01) #解像度を0.01に
y = np.arange(-2,2,0.01) #解像度を0.01に
xx,yy = np.meshgrid(x,y)
z = np.zeros((len(x),len(y)))
for i in range(len(x)):
for j in range(len(y)):
v = np.array([xx[i][j],yy[i][j]])
r = np.linalg.norm(v)
z[i][j] = np.exp(-r)
plt.figure(figsize=(5,5))
plt.pcolormesh(x,y,z,cmap='coolwarm') #ここを変更
plt.show()
Reference
이 문제에 관하여(파이썬에서 임의의 정의 영역을 가진 히트 맵을 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hibit/items/71d8874eaf448267c6a3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-2,2,0.01) #解像度を0.01に
y = np.arange(-2,2,0.01) #解像度を0.01に
xx,yy = np.meshgrid(x,y)
z = np.zeros((len(x),len(y)))
for i in range(len(x)):
for j in range(len(y)):
v = np.array([xx[i][j],yy[i][j]])
r = np.linalg.norm(v)
z[i][j] = np.exp(-r)
plt.figure(figsize=(5,5))
plt.pcolormesh(x,y,z,cmap='coolwarm') #ここを変更
plt.show()
Reference
이 문제에 관하여(파이썬에서 임의의 정의 영역을 가진 히트 맵을 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hibit/items/71d8874eaf448267c6a3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)