2013-03-25 4 views
0

У меня возникли проблемы с кажущейся простой проблемой. У меня есть список координат атомов в формате X, Y, Z. Я использовал numpy.linspace(), чтобы составить список «бункеров» из координат Z. Координаты Z таковы, что разница между точками после сортировки может быть только десятичным или целым числом. Я хотел бы переместить «бункеры» и добавить только в X, Y, Z наборов координат, которые попадают в диапазон «bin0» - «bin1», а затем «bin1-bin2». В основном это то, что я хотел бы сделать в некотором очень плохом псевдокоде. Я уже быть_наст равномерно разнесенных номера, которые я хочу использовать в качестве «бункера» диапазоныИспользование диапазонов по набору данных

1. Find XYZ coordinate sets that fall into first 'bin' 
    2. Do math on them and save the value out 
    3. Move on to next bin. 

Я знаю, что есть, вероятно, просто питон решения, но мои понимания из списковых работают с диапазонами ограничено. Любые советы приветствуются.

EDIT * попытался добавить «SSCCE»

import numpy as np 
xyz = [[2,-2,0.29],[ -2,0,1.9 ],[2,1,2.35],[2,-3,2.96],[ 2,0,4.97],[0,3,5.13],[-1,3,5.41]] 
bins = [0,0.57,1.14,1.71,2.28,2.85555556, 3.42, 3.99, 4.56,5.14] 
'''Now I want to add all of the xyz's with a z-value between 0 and .57 a list or somthing  so that I can use them, 
then I want to move on to the xyz's that fall between .57 and 1.14''' 
workingXYZs = [] 
for x,y,z in xyz: 
    for i in bins: 
    if z > i: #but not greater than next I 
     #do math and move on to next interval 
+1

Не могли бы вы дать нам короткий, самодостаточный, правильный пример вашего кода и данных? Это довольно непонятно, о чем вы просите. http://sscce.org/ – Wilduck

+0

Использование понимания списка для выделения полезных данных из всего списка выполняется быстрее, чем использование цикла 'for'. –

ответ

0

Если данные список кортежей, вы можете легко использовать список понимание;

# I'm making up some data 
In [13]: atoms = [(random.random(), random.random(), random.random()) for i in xrange(100)] 

# Select every coordinate wher 0 < Z < 0.01 
In [16]: [a for a in atoms if 0 <a[2]<0.01] 
Out[16]: [(0.2118237642057983, 0.3740988439603703, 0.007613439427947566), (0.1982752864446785, 0.8253287086824319, 0.009925330198799487), (0.07769287016236548, 0.7685209005035492, 0.00855)] 
+0

Я думаю, что я на что-то с np.digitize() – pioneer903

+0

@ pioneer903: да, это может сработать. –

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