将x,y,z坐标排序到定义的体积内的数组中Python / numpy

时间:2016-04-20 06:08:00

标签: python arrays sorting numpy multidimensional-array

您好,我相当新,我希望您能回答我的问题或帮助我找到更好的方法!

假设我有一组x,y,z坐标,我想将其细分为包含x,y,z空间总体积的特定体积(dV)内的点的数组。

我一直试图先用x值对每个x,y,z坐标进行排序,然后将一些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中附加可能会令人不安,所以我尝试的另一种方法是首先创建多维矩阵以填充它,但我遇到的问题是我没有知道如何创建一个多维矩阵,可以在第二维中有1个条目但在第二个ex的下一个索引中有5个:[[[0,0,0]],[[0,0,0],[ 0,0,0],[0,0,0],[0,0,0],[0,0,0]]]。

我真的很感激任何提示或建议,如果不是很清楚,请告诉我,我会尝试解释一下!

1 个答案:

答案 0 :(得分: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