您好,我相当新,我希望您能回答我的问题或帮助我找到更好的方法!
假设我有一组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]]]。
我真的很感激任何提示或建议,如果不是很清楚,请告诉我,我会尝试解释一下!
答案 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