2017-01-26 4 views
0

보간 :이 배열 업 샘플링 모두 원하는는 업 샘플링 내가 배열 같은 것을 가지고 NumPy와 배열

array = np.arange(0,4,1).reshape(2,2) 

> [[0 1 
    2 3]] 

을뿐만 아니라 결과 값을 보간. 나는 배열을 업 샘플링 할 수있는 좋은 방법은 사용하는 것입니다 알고 :

array = eratemp[0].repeat(2, axis = 0).repeat(2, axis = 1) 
[[0 0 1 1] 
[0 0 1 1] 
[2 2 3 3] 
[2 2 3 3]] 

하지만 배열의 각 × 2 절 사이에 '육중 한'특성을 제거하려면 값을 보간하는 방법을 알아낼 수 없습니다. 이 같은

[[0 0.4 1 1.1] 
[1 0.8 1 2.1] 
[2 2.3 3 3.1] 
[2.1 2.3 3.1 3.2]] 

뭔가 (참고 :이 정확한 숫자되지 않습니다)

나는 이런 식으로 뭔가를 할 수 있습니다. 이 특정 2D 그리드를 보간하는 것은 불가능할 수도 있지만 내 대답의 첫 번째 표를 사용하면 픽셀 수를 늘리면서 업 샘플링 프로세스 중에 보간이 가능해야하므로 '간격을 채울 수 있습니다. '.

내삽 유형에 너무 신경을 쓰지 않아 최종 출력물이 매끄러운 표면을 제공합니다! scipy.interp2d 메소드를 사용하려고했지만 아무런 도움이되지 않으면 누군가가 그들의 지혜를 나눌 수 있다면 감사 할 것입니다!

+0

2 차원 보간을 원하십니까?이것이 어떻게 작동하는지 나는 모르겠다. 한 축을 보간 할 때 다른 축의 보간법을 깨뜨릴 수 있습니다. 권리? – tnknepp

+0

"아이디어를 얻었습니다!"- 죄송합니다. 네가 기대하는 나머지 4x4 배열을 채울 수 있을까? –

+0

의견을 주셔서 감사합니다. 나는 그리드의 나머지 부분을 채워서 원하는 결과를 얻었습니다. 제 대답의 두 번째 2D 그리드를 삽입하는 것은 문제가 될 수 있지만 업 샘플링 프로세스가 진행되는 동안 첫 번째 그리드를 보간하는 방법이 있어야한다는 것을 알고 있습니다. –

답변

1

보간에 SciPy interp2d을 사용할 수 있습니다. here 문서를 찾을 수 있습니다. 당신이 다음과 같아야합니다 znew을 인쇄 할 경우

from scipy import interpolate 
x = np.array(range(2)) 
y = np.array(range(2)) 
a = np.array([[0, 1], [2, 3]]) 
xx, yy = np.meshgrid(x, y) 
f = interpolate.interp2d(x, y, a, kind='linear') 

xnew = np.linspace(0, 2, 4) 
ynew = np.linspace(0, 2, 4) 
znew = f(xnew, ynew) 

:

나는 문서에서 약간의 예제를 수정 한

array([[ 0.  , 0.66666667, 1.  , 1.  ], 
     [ 1.33333333, 2.  , 2.33333333, 2.33333333], 
     [ 2.  , 2.66666667, 3.  , 3.  ], 
     [ 2.  , 2.66666667, 3.  , 3.  ]]) 
+0

+1 감사합니다! 한 번에 내 업 샘플링 및 보간 단계를 수행하는 기존 함수를 잘 사용하십시오! –

0

내가 사용하는 것이 scipy.misc.imresize :

array = np.arange(0,4,1).reshape(2,2) 
from skimage.transform import resize 
out = scipy.misc.imresize(array, 2.0) 

2.0은 출력이 두 배가되도록하려는 것입니다. 입력 치수. 또는 원래 치수의 비율 또는 새 치수 만 지정하려면 int 또는 tuple을 제공 할 수 있습니다.

이것은 매우 사용하기 쉽지만 imresize은 최대 값이 255가되고 최소값이 0이되도록 모든 단계를 조정하므로 추가 단계가 있습니다. 그리고 데이터 유형을 np.unit8으로 변경합니다. 같은 :하지만,

>>> out.round(2) 
array([[0. , 0.25, 0.75, 1. ], 
     [0.51, 0.75, 1.26, 1.51], 
     [1.51, 1.75, 2.26, 2.51], 
     [2. , 2.25, 2.75, 3. ]]) 

imresize가 중단 경고 및 대체와 함께 제공 :

out = out.astype(array.dtype)/255 * (np.max(array) - np.min(array)) + np.min(array) 

는의가 출력 살펴 보자

사용 중단 경고 : imresize이 사용되지 않습니다. imresize은 SciPy 1.0.0에서 으로 사용되지 않으며 1.2.0에서 제거됩니다. 대신 skimage.transform.resize을 사용하십시오.