我目前正在使用嵌套for循环遍历数组,以查找符合特定条件的值。问题是这种方法效率低下,而且耗时。我被告知更好的方法可能是根据数据对两个数组进行排序,但这需要我将几个一维数组和一个多维数组组合起来,根据一列进行排序,然后再次将它们分开。有没有更有效的方法?以下是我的代码示例:
x1 = []
x2 = []
velocity = []
plane1Times = np.array([[2293902],[2848853],[482957]])
plane2Times = np.array([[7416504],[2613113],[2326542]])
plane1Local = np.array([[0,0,0],[0,u,0],[0,2*u,0],[u,0,0],[u,u,0],[u,2*u,0],[2*u,0,0],[2*u,u,0],[2*u,2*u,0],[3*u,0,0],[3*u,u,0],[3*u,2*u,0]],dtype='float')
plane2Local = np.array([[0,0,D],[0,u,D],[0,2*u,D],[u,0,D],[u,u,D],[u,2*u,D],[2*u,0,D],[2*u,u,D],[2*u,2*u,D],[3*u,0,D],[3*u,u,D],[3*u,2*u,D]],dtype='float')
for i in range(0,len(plane1Times)):
tic = time.time()
for n in range(0,len(plane2Times)):
if plane2Times[n] - plane1Times[i] <= 10000 and plane2Times[n] - plane1Times[i] > 0:
x1 = plane1Local[plane1Dets[i]]
x2 = plane2Local[plane2DetScale[n]]
distance = np.sqrt((x2[0]-x1[0])**2 + (x2[1]-x1[1])**2 + (x2[2])**2)
timeSeparation = (plane2Times[n]-plane1Times[i])*timeScale
velocity += distance/timeSeparation
break
举一个当前所用时间的例子,每个时间数组的长度为10**6个值,因此i
中的100个循环大约需要60秒。有人能帮我吗?你知道吗
我不能真正测试,因为你提供的代码不完整,但这是一个可能的解决方案
消除第二个循环,一次做减法。然后搜索新的数组,它满足您的条件。因为您似乎想要第一个值,所以只需使用第一个索引,如
row[0]
,即可获得值检查的索引。删除第二个for循环会大大减少时间。你知道吗相关问题 更多 >
编程相关推荐