2016-06-10 8 views
0

xyz 튜플 세트를 표면으로 부드럽게하고 (x,y) 원래 세트의 surface(z') 값을 반환하고 싶습니다.xyz 튜플의 커널 평활 세트 (파이썬 우선 의사 코드 환영)

원본 데이터를 그리드로 보간하고 부드럽게하고 다시 평가하는 직접적인 방법이 있습니까? 그게 가장 좋은 접근 방법이라면 사람들이 좋아하는/표준 인 파이썬 특정 기능이 있습니까? 예를 들어

:

(x1,y1,z1) -> (x1,y1,z1') 
(x2,y2,z2) -> (x2,y2,z2') 
(x3,y3,z3) -> (x3,y3,z3') 
(x4,y4,z4) -> (x4,y4,z4') 

답변

0

"평활화"잘 정의 된 동작 아니다; 그것이 의미하는 바는 해석에 열려 있습니다. "더 매끄러운"데이터를 생성하는 많은 연산이 있으며 대부분은 평활화의 양을 제어하는 ​​하나 이상의 매개 변수를 가지고 있습니다. 평활화 된 데이터로 무엇을 할 것인지에 대해 더 많이 알지 못하면이 질문에 대한 명확한 대답을 내리기가 어렵습니다.

여기에 답변이 있습니다. :)

scipy.interpolate.Rbf은 스무딩 매개 변수를 포함하는 n 차원 데이터의 보간 자입니다. 이 매개 변수가 0 (기본값)이면 true 보간이 생성됩니다. 즉, 주어진 z 값을 지정된 (x, y) 값으로 반환하고 다른 점에서는 보간 된 z 값을 반환합니다. Rbf에는 smooth 매개 변수가 포함되어 있으며 문서 문자열에 "0보다 큰 값은 근사값의 매끄러움을 증가시킵니다."

그래서, Rbf을 사용하여 질문에 대한 답변은 다음과 같습니다.

f = Rbf(x, y, z, smooth=<a positive number>) 
z_smoothed = f(x, y) 

(불행하게도, Rbf 문서화 문자열을 사용하는 방법 smooth 설명하지 않습니다 당신은 알아 코드에 발굴해야 할 것이다 그 동안 어떤 값을 시도해보고 결과가 사용자의 요구를 충족시키는 지 확인할 수 있습니다.)

다음 스크립트는 Rbf을 0이 아닌 smooth 인수와 함께 사용하는 예입니다. 입력 점과 매끄럽게 한 표면은 matplotlib를 사용하여 플롯됩니다.

import numpy as np 
from scipy.interpolate import Rbf 

import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 


# Generate some random (x, y, z) values. 
npoints = 36 
np.random.seed(12345) 
x, y = np.random.rand(2, npoints) 
z = np.cos(3*x)*np.sin(2*y) + 0.4*np.random.randn(npoints) 


# "Interpolator" with smoothing 
f = Rbf(x, y, z, smooth=0.05) 

print("Original z values:") 
print(z) 
print("Smoothed z values:") 
print(f(x, y)) 

u = np.linspace(0, 1, 25) 
xx, yy = np.meshgrid(u, u) 
zz = f(xx, yy) 

fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
ax.scatter(x, y, z) 

surf1 = ax.plot_surface(xx, yy, zz, rstride=1, cstride=1, color='g', 
         linewidth=0, antialiased=False, alpha=0.5) 

plt.show() 

스크립트는 다음 플롯을 생성합니다. 파란색 점은 원래 데이터이고 녹색면은 Rbf에 의해 생성 된 함수의 그래프입니다.

plot

스크립트 인쇄 :

Original z values: 
[-0.34127933 -0.30729404 0.21155127 0.82107652 0.17163933 -0.44447561 
-0.62316986 -0.07631452 -0.2452825 0.08006371 -0.16038592 -1.15094797 
    0.97879369 -0.59069121 0.28481385 -0.61505364 -1.28958296 -0.40040525 
-0.62065409 0.10887611 0.11082111 -0.57756184 -0.08303365 0.1736536 
-0.11741524 -0.25279036 -0.87523777 -0.62589892 0.14774674 1.02822874 
    1.40065013 0.0570847 -1.24442082 1.29216089 0.04075983 0.35829967] 
Smoothed z values: 
[-0.4760952 -0.32638375 0.33082556 0.81805681 0.04136433 -0.04617472 
-0.6941891 -0.17280308 -0.21626414 -0.25286811 -0.19661876 -1.04547018 
    1.19599927 -0.55479106 0.3257578 -0.35879233 -0.9914419 -0.74646378 
-0.60559207 -0.11546096 -0.10684431 -0.35038102 0.05290993 0.10818459 
-0.07302746 -0.33240211 -0.82955756 -0.32360917 0.11565045 0.98144511 
    1.22421926 -0.08092414 -0.97381114 1.16754806 0.01186976 0.11594726] 
+0

도움이 시간을내어 주셔서 감사합니다, 정말 감사! – Mark