Использование диапазонов для набора данных

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

    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.

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

РЕДАКТИРОВАТЬ * попытался добавить «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

person pioneer903    schedule 25.03.2013    source источник
comment
Можете ли вы дать нам короткий, автономный, правильный пример вашего кода и данных? Совершенно непонятно, о чем вы просите. sscce.org   -  person Wilduck    schedule 26.03.2013
comment
Использование понимания списка для выделения полезных данных из всего списка быстрее, чем использование цикла for.   -  person Roland Smith    schedule 26.03.2013


Ответы (1)


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

# 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.008550123528872411)]
person Roland Smith    schedule 25.03.2013
comment
Я думаю, что я на что-то с np.digitize() - person pioneer903; 26.03.2013