2016-04-20 5 views
1

こんにちは、私はかなり新しく、私の質問に答えるか、より良い方法を見つけるのを助けてくれることを願っています!定義されたボリューム内の配列にx、y、z座標をソートPython/numpy

私は、x、y、z空間の全体積の特定の体積(dV)内の点を含む配列に細分したいx、y、z座標のセットを持っているとします。

私は各x、y、z座標をx値で最初にソートしようとしていましたが、次にいくつかのdxで配列の新しい次元に細分し、次にこれらの細分化された各次元内でy値をソートし、その後、DY、およびz軸に沿って同じ、...私がセットに座標追加する配列を作成しようとしてきた

ソートされ、細分化座標を与えることによって、

def splitter(array1): 
    xSortx = np.zeros([10,1,3]) 
    for j in range(0,10): 
     for i in range(len(array1)) : 
      if (j * dx) <= array1[i][0] < (j + 1)*dx: 
       np.append(xSortx[j],array1[i]) 

すべてが働いているように見えましたしかし、追加の部分は、私はPythonで追加する聞いたので、私が試みた別の方法は多次元的なmを作成することでしたそれを埋めるためにatrixを最初に使用しましたが、私は、例えば2番目の次元に1つのエントリを持ちますが、2番目のexの次のインデックスに5つの多次元行列を作成する方法はわかりません。[[[[ 0,0,0]、[[0,0,0]、[0,0,0]、[0,0,0]、[0,0,0]、[0,0,0]]] 。

私は本当にヒントやアドバイスをお待ちしておりますが、これがあまり明確でない場合はお知らせください。さらに詳しく説明します。

+0

あなたが得る出力、および所望の出力を最小限の例を示してください。 "append does not work"はあまりにも漠然として私たちを助けることができません。問題がエラーの場合は、エラー・メッセージを表示してください。 – Julien

+0

別の注記では、通常のネストされたリストをnumpyの代わりに必要な次元の柔軟性を持つ多次元配列として使用することができます – Julien

+0

ボリューム内のポイントとその外にあるポイントだけを2つのカテゴリに細分しようとしていますか?この問題をより簡単にする幾何学的制約がありますか(たとえば、音量が球か長方形のボックス)。 –

答えて

0

私は、これはあなたが望むものであると信じて:

# define your working volume 
Vmin = np.array([1,2,3]) 
Vmax = np.array([4,5,6]) 
DV = Vmax-Vmin 

# define your subdividing unit 
d = 0.5 
N = np.ceil(DV/d).astype(int) # number of bins in each dimension 

def splitter(array): 
    result = [[[[] for i in xrange(N[0])] for j in xrange(N[1])] for k in xrange(N[2])] 
    for p in array: 
     i,j,k = ((p - Vmin)/d).astype(int) # find the bin coordinates 
     result[i][j][k].append(p) 
    return result 

# test the function 
test = Vmin + np.random.rand(20,3) * DV # create 20 random points in the working volume 
result = splitter(test) 
for i in xrange(N[0]): 
    for j in xrange(N[1]): 
     for k in xrange(N[2]): 
      print "points in bin:", Vmin + np.array([i,j,k]) * d 
      for p in result[i][j][k]: 
       print p 
関連する問題