2016-12-23 11 views
1

Я создал сетку 2d длиной 100 и у меня есть вектор кортежей, который имеет 2d точек.Как я могу интерполировать вектор на 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 ячеек сетки и где вектор кортеж присутствует в этой координате диапазоне, я хочу 1 против него еще 0. Таким образом, выходная сетка будет иметь 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 модуля, чтобы найти, где ваш вектор помещается в сетке:

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

Но вы результат проиндексировали только 3 из 4 точек от вектора. Если согласно моему векторному содержанию и код: @vres: «1: (-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]' только изменяет один. Следовательно, 3 из 4. Вы можете проверить вывод, напечатав 'print ([(сетка [x-1], сетка [x]) для x в idx])'. Это одинаково. –

+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

 Смежные вопросы

  • Нет связанных вопросов^_^