【问题标题】:Sorting x,y,z coordinates into arrays within a defined volume Python/numpy在定义的体积 Python/numpy 中将 x、y、z 坐标排序到数组中
【发布时间】:2016-08-12 14:54:18
【问题描述】:

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

假设我有一组 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]]].

我非常感谢任何提示或建议,如果这不是很清楚,请告诉我,我会尝试更多解释!

【问题讨论】:

  • 请展示您获得的输出和所需输出的最小示例。 “追加不起作用”对我们来说太模糊了,无法提供帮助。如果问题是错误,则显示错误消息。
  • 另一方面,您可以将常规嵌套列表用作具有所需维度灵活性的多维数组,而不是 numpy
  • 您是否试图仅细分为 2 个类别,即卷内的点和卷外的点?您是否有可能使这个问题更容易解决的几何约束(例如,体积是球体还是矩形框)?
  • Julien,我没有收到任何错误,而是在打印最终数组 xSortx 时,我收到了原始的零数组。
  • 奥利弗,我正在尝试将整个空间划分为许多相似的矩形框,然后将单个框内的所有点分组到一些可访问的数组中

标签: python arrays sorting numpy multidimensional-array


【解决方案1】:

我相信这就是你想要的:

# 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 2020-10-05
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    相关资源
    最近更新 更多