0

一見単純な問題で問題が発生しています。X、Y、Z 形式の原子座標のリストがあります。numpy.linspace() を使用して、Z 座標から「ビン」のリストを作成しました。Z 座標は、ソート後のポイント間の差が小数または整数のみになるようなものです。「ビン」を移動し、「bin0」-「bin1」、「bin1-bin2」の範囲にある座標セットの X、Y、Z のみを追加したいと思います。基本的に、これは本当に悪い疑似コードでやりたいことです。「ビン」範囲として使用したい等間隔の数値が既にあります

    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
4

1 に答える 1

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.008550123528872411)]
于 2013-03-25T22:21:54.557 に答える