这是我第一次提问,所以请耐心等待我:)
我正在用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
,排序和求和就应该是直截了当的。
问题:
qdist
需要太长时间([1,1,1] - > [2,2,2]之间的路径大约需要10分钟)。我想可能有更有效的方法来解决这个问题。qplanes
的计算会产生错误:标量变量的索引无效
虽然我不确定原因。
哦,非常明智的管子,我恳求你协助这个编程的quandry。非常感谢你,如果你冒险尝试这个任务。我也很感谢有关我如何提出问题的任何反馈。非常感谢你。