我如何使下一段代码运行得更快?我首先计算多个点之间的距离(没问题),但在那之后,我需要获得一个列表中所有点的平均值,这些点比(在本例中为 20m)更接近,如果 20 是小,这段代码很快,但除此之外,它非常慢,因为我需要索引等 - 下一段代码完全符合我的要求,但如果我取 20 作为值而不是例如,它会非常慢6(因为20,大约有100个点足够接近,而6,只有3或5左右)
D = numpy.sqrt((xf[:,None] - xg[None,:])**2 + (yf[:,None] - yg[None,:])**2 + (zf[:,None] - zg[None,:])**2)
dumdic = {}
l1=[]
for i in range(len(xf)):
dumdic[i] = D[i,:][D[i,:]<20] # gets the values where the distance is small enough
A=[]
for j in range(len(dumdic[i])):
A.append(G.epsilon[list(D[i,:]).index(dumdic[i][j])]) # for each point in that dummy dictionary, gets the index where i need to take the epsilon value, and than adds that right epsilon value to A
l1.append(numpy.mean(numpy.array(A)))
a1 = numpy.array(l1)
G.epsilon 是数组,其中每个点都有一个测量值。因此,在该数组中,我需要(对于另一个数组中的每个点)取该数组中与该其他点足够接近的所有点的平均值。
如果您需要更多详细信息,请询问
在@gregwittier 的回复之后,这是更好的版本:任何人都可以使用oneliner 吗?(twoliner,因为 D=... 需要一行)我想如果我没有 l1=... 并且重铸为 numpy 数组,我想会更加pythonic,但现在最糟糕的事情是杀死那个 for 循环,通过使用轴参数左右?
D = numpy.sqrt((xf[:,None] - xg[None,:])**2 + (yf[:,None] - yg[None,:])**2 + (zf[:,None] - zg[None,:])**2)
l1=[]
for i in range(len(xf)):
l1.append(numpy.mean(G.epsilon[D[i,:]<20]))
a1 = numpy.array(l1)