2016-12-23 3 views
1

길이가 100 인 2 차원 격자를 생성했으며 일부 2 차원 점을 나타내는 튜플 벡터를 얻었습니다.어떻게 2 차원 격자에서 벡터를 보간 할 수 있습니까?

x1 = np.linspace(-1,1,10) 
y1 = np.linspace(-1,1,10) 
grid=[] 
for i in x1: 
    for j in y1: 
     grid.append((i,j)) 

#The vector 
vec=[(.033,-.22),(.5,-.9),(-.77,-.01),(.5,.2)] 

는 내가 원하는 것은 벡터 튜플 그 좌표 범위에 존재하는 이상 그리드 어디서나 모든 100 개 세포를 반복하는 것입니다, 나는 그렇지 0에 대해 1를 원한다. 따라서 출력 그리드에는 vec에 해당하는 4 개의 숫자가 있습니다 & 96 개의 0이 있습니다.

ctr=0 
for i in x1: 
    for j in y1: 
     if ctr==0: 
      temp=(i,j) 
      ctr+=1 
      continue 
     else: 
      print temp, "to" ,i,j 
      temp=(i,j) 
      ctr+=1 

답변

1

나는 당신의 벡터 그리드에 맞는 위치를 찾기 위해 내장 bisect 모듈 파이썬을 사용하는 것이 좋습니다 것입니다 :

import numpy as np 
from bisect import bisect 

result = np.zeros(len(grid)) 
idx = [bisect(grid, x) for x in vec] 
result[idx] = 1 
+0

결과는 벡터에서 4 포인트 중 3 포인트 만 인덱싱됩니다. (-0.11111111111111116, 1.0) (0.11111111111111116, -1.0) 1 : (0.33333333333333326, 1.0) (0.55555555555555536, -1.0) 1 : (-0.77777777777777779, 1.0) (-0.55555555555555558, -1,0) 1 : (0.33333333333333326, 1.0) (0.55555555555555536, -1.0)' – vinita

+1

두 번째 및 마지막 입력 벡터가 동일한 위치를 만들기 때문에 그리드에서 모든 인덱스는 bisect에 의해 반환되지만,'result [idx]'는 단지 하나만 변경합니다. 그러므로 4 점 만점에 3 점입니다.'printx [idx]에'x에 대해 grid [x-1], grid [x])를 출력하여 결과를 확인할 수 있습니다. 그건 평등합니다. –

+0

잘 했어, 실제 그리드에서 테스트 해보자 .--). 나는 그것이 3d 그리드에도 적용되기를 바랍니다. ?? 또는 3D 그리드를위한 다른 라이브러리가 있습니까? – vinita

3

당신이 불어 스파 스 표현 또는 전체에 출력을해야합니까 -이 :

** 나는 나는 이런 식으로 뭔가 의미 그리드의 범위를 조정 말할 때? "출력 그리드가 피쳐 벡터입니까?"에서처럼 기계 학습 입력에 대한 출력 벡터를 사용하려고합니까?

어쩌면 (매우 큰 크기의 그리드하지만 & 벡터를 효율적이지)이 시도 :

ctr=0 
for v in vec: 
    for i in x1: 
     for j in y1: 
      if ctr==0: 
       temp=(i,j) 
       ctr+=1 
       continue 
      else: 
       #print temp, "to" ,i,j 
       temp2=(i,j) 
       if temp<=v<=temp2: 
        print 1,":", temp, temp2 
       temp=(i,j) 
       ctr+=1 
+0

답변에서 질문을 할 때 답이 아니라 주석이어야한다고 생각합니다. – rjdkolb

+0

Cannt comment <50 rep :-( – vres

+1

:-(Silly SO rules ... – rjdkolb