在Python中确定最接近3D线的点的平面

时间:2015-08-06 22:07:36

标签: python sorting numpy distance

这是我第一次提问,所以请耐心等待我:)

我正在用Python编写代码来减少存储为P(x,y,z)的数据,其中P是标量强度。我想选择一个通过空间的路径([x1,y1,z1] - > [x2,y2,z2])和最大积分半径(rMax),然后获得一个列表向量U(x, y,z),其中U是在垂直于0 <0的路径的平面上积分的强度。 r&lt; RMAX。我的问题是在处理集成之前对坐标进行排序。我认为进行积分的方法是确定,对于线周围的一个体积中的一组点,该线上的哪个点是最接近的。

这个问题与Find nearest value in numpy array类似,但相当复杂。

qpath = [[x1, y1, z1], [x2, y2, z2], ..., [xN,yN,zN]]

代表路径。

qvol = [[x'1, y'1, z'1, P(x'1, y'1, z'1)], 
    [x'1, y'1, z'2, P(x'1, y'1, z'2)], ..., 
    [x'1, y'2, z'1, P(x'1, y'2, z'1)], ..., 
    [x'N, y'N, z'N, P(x'N, y'N, z'N)]]

表示体积内足够接近路径的所有点的坐标和强度(比某个值“R”更接近)。

以下是我的尝试:

qdist = np.array([[[np.linalg.norm(i[0:3]-j), j[0], j[1], j[2], i[0], i[1], i[2]]
    for j in qpath] for i in qvol])

qplanes = np.array([j for j in i if j[0]==np.min(i[:,0]) 
    and j<R for i in qdist])

qdist是一个等级3张量,第k页上的第i行包含[d_ik,xi,yi,zi,x'k,y'k,z'k],其中d_ik是距离从线上的第i个点到第k个体积像素。

qplanes应为rank 2张量,其中每行包含来自qdist的每个元素的信息,其中该行最接近体积像素。

一旦我qplanes,排序和求和就应该是直截了当的。

问题:

  1. 计算qdist需要太长时间([1,1,1] - > [2,2,2]之间的路径大约需要10分钟)。我想可能有更有效的方法来解决这个问题。
  2. qplanes的计算会产生错误:
  3.   

    标量变量的索引无效

    虽然我不确定原因。

    哦,非常明智的管子,我恳求你协助这个编程的quandry。非常感谢你,如果你冒险尝试这个任务。我也很感谢有关我如何提出问题的任何反馈。非常感谢你。

0 个答案:

没有答案