2016-12-23 6 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をしたいです。したがって、出力グリッドは4つのもの(vecに対応)& 96ゼロを持ちます。

**私は、グリッドの座標範囲を言うとき、私はこのような何かを意味する: -

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モジュールのpythonを使用することをお勧めします:

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

実際には、2番目と最後の入力ベクトルが同じ位置を作成するのであなたのグリッドでは、すべてのインデックスがbisectによって返されますが、 'result [idx]'は1つしか変更しません。したがって、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

:-(愚かなSOのルール... – rjdkolb

関連する問題