【发布时间】:2012-11-05 00:41:28
【问题描述】:
我需要沿定义的线 (3D) 以相等的间距计算 n 个点 (3D)。 我知道这条线的起点和终点。首先,我使用了
for k in range(nbin):
step = k/float(nbin-1)
bin_point.append(beam_entry+(step*(beamlet_intersection-beam_entry)))
然后,我发现对大型数组使用追加需要更多时间,然后我更改了这样的代码:
bin_point = [start_point+((k/float(nbin-1))*(end_point-start_point)) for k in range(nbin)]
我收到一个建议,使用 newaxis 将进一步缩短时间。 修改后的代码如下所示。
step = arange(nbin) / float(nbin-1)
bin_point = start_point + ( step[:,newaxis,newaxis]*((end_pint - start_point))[newaxis,:,:] )
但是,我无法理解 newaxis 函数,我也有疑问,如果改变 start_point 和 end_point 的结构或形状,相同的代码是否可以工作。同样如何使用newaxis来mdoify以下代码
for j in range(32): # for all los
line_dist[j] = sqrt([sum(l) for l in (end_point[j]-start_point[j])**2])
抱歉这么笨拙,要更清楚start_point和end_point的结构是
array([ [[1,1,1],[],[],[]....[]],
[[],[],[],[]....[]],
[[],[],[],[]....[]]......,
[[],[],[],[]....[]] ])
【问题讨论】:
-
start_point等是什么类型的?如何创建一个? -
@Alfe 正如我定义的所有点都是 3 维的,单个 start_point 或 end_point 看起来像这样 [1,2,3],我将这些点作为输入。因此,在上面的代码中,start_point 或 end_point 本质上是点的集合,例如 [[1,2,3],[2,1,3],[4,5,3]]。我试图在我的问题的最后一部分,即“数组”中解释这一点。不好意思,我把嵌套列表做成了数组操作,大大减少了时间。
-
所以
start_point实际上是一个点列表,而不是一个点?
标签: python time for-loop numpy