如何使下一段代码运行得更快? 我首先计算多个点之间的距离(没问题),但是在那之后,我需要得到一个列表中所有点的值的平均值,这些点都比(在这个例子中是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)
epsilon是一个数组,其中每个点都有一个测量值。所以在这个数组中,我需要取(另一个数组中的每一个点)这个数组中所有点的平均值,这些点足够接近另一个点。你知道吗
如果你需要更多的细节,尽管问
在@gregwittier回复后,这是更好的版本: 有人能写一行吗?(两行,因为D=。。。取一行) 我想如果我没有l1=。。。重铸numpy数组,但现在最糟糕的事情是通过使用axis参数来终止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)
您的文字描述似乎与示例代码实际所做的有所不同。从文字描述来看,我认为你需要
我不能理解你的示例代码,所以我不知道如何匹配它的功能。也许您仍然需要迭代其中一个维度(即,您可能仍然需要示例中的外
for
循环)。你知道吗如果计算一组点之间的all距离,则可能是一个复杂的问题。随着点集的增加,可能的组合数量急剧增加。你知道吗
我想这就是你想要的。你知道吗
你可以把第二行和第三行合起来再挤下一行。你知道吗
相关问题 更多 >
编程相关推荐