2015-12-16 5 views
0
grid=400 
P1=[] 

for i in range(grid+1): 
    P1.append(i/grid) 

x=[] 
y=[] 
z=[] 

for j in range(len(P1)): 
    for k in range(len(P1)): 
     for l in range(len(P1)): 
      if P1[j] + P1[k] + P1[l] == 1.0: 
       x.append(P1[j]) 
       y.append(P1[k]) 
       z.append(P1[l]) 

Я делаю тройную сетку, и я заметил, что некоторые координаты отсутствуют. Я уверен, что условие является правильным, и я получаю случайные координаты отсутствуют, когда я построить с различного размером сеткиОтсутствующие координаты в вложенной петле

, например, в размере 400 сетки, пример недостающих координат были ниже: -

.... 
0.5025,0.29,0.2075 
0.5025,0.2975,0.2 
0.5025,0.3,0.1975 
.... 

(0.5025,0.2925,0.205) и (0.5025,0.295,0.2025) отсутствуют. любая идея решить это?

+0

не сравнить поплавки с == – timgeb

+0

считают, используя что-то вроде [ 'numpy.meshgrid'] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.meshgrid.html) – iled

+0

есть ли какой-нибудь способ вокруг него? если бы я должен был положить =, это означало бы синтаксическую ошибку, то –

ответ

0
import itertools 

grid=400 
P1=[i/grid for i in range(grid+1)] 
epsilon = 0.001 

x=[] 
y=[] 
z=[] 
coords = [x,y,z] 

for vals in itertools.product(P1, P1, P1) 
    if abs(sum(vals)-1) >= epsilon: continue # this epsilon value will correct for the variations due to floating point arithmetic 
    for L,v in zip(coords, vals): L.append(v) 
+0

thx, любые советы о том, как я могу избежать подобной проблемы в будущем? –

+0

@ DannyLee: не слишком сильно зависеть от математики с плавающей запятой – inspectorG4dget

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