我有几个(~10 ^ 10)点的x,y,z坐标数组(这里只显示了5个)
a= [[ 34.45 14.13 2.17]
[ 32.38 24.43 23.12]
[ 33.19 3.28 39.02]
[ 36.34 27.17 31.61]
[ 37.81 29.17 29.94]]
Run Code Online (Sandbox Code Playgroud)
我想创建一个新数组,只包含d与列表中所有其他点相距至少一些距离的点.我用while循环编写了一个代码,
import numpy as np
from scipy.spatial import distance
d=0.1 #or some distance
i=0
selected_points=[]
while i < len(a):
interdist=[]
j=i+1
while j<len(a):
interdist.append(distance.euclidean(a[i],a[j]))
j+=1
if all(dis >= d for dis in interdist):
np.array(selected_points.append(a[i]))
i+=1
Run Code Online (Sandbox Code Playgroud)
这样可行,但执行此计算需要很长时间.我读到某处while循环非常慢.
我想知道是否有人对如何加快这个计算有任何建议.
编辑:虽然我的目标是找到距离所有其他距离至少有一段距离的粒子,但我只是意识到我的代码中有一个严重的缺陷,假设我有3个粒子,我的代码执行以下操作,对于第一次迭代i,它计算距离1->2,1->3比方说1->2小于阈值距离d,因此代码抛弃粒子1 …
我有两个嵌套数组说
a=[[1,2,3],[2,4,7],[4,2,8],[3,5,7],[6,1,2]]
b=[[1,6,7],[2,4,9],[4,3,5],[3,10,2],[5,3,2],[7,2,1]]
Run Code Online (Sandbox Code Playgroud)
我想只保留那些b第一个元素不在数组的第一个元素中共同的数组a,所以对于这两个我们应该得到
c=[[5,3,2],[7,2,1]]
Run Code Online (Sandbox Code Playgroud)
有没有办法在python中执行此操作?
我有
y1=[ 9.49110000e-004 4.74145420e-004 1.41847155e-008 3.33228420e-028
3.76352289e-081 4.48206815e-193 0.00000000e+000 0.00000000e+000
0.00000000e+000 0.00000000e+000 0.00000000e+000]
x=[ 112. 111.97667396 111.90666665 111.78989038 111.62619837
111.41538384 111.15717866 110.85125168 110.49720654 110.09457901
109.64283388]
Run Code Online (Sandbox Code Playgroud)
所有y值均为正,因此曲线下的面积应为正。但是当我尝试使用辛普森规则进行整合时
from scipy.integrate import simps
b= simps(y1, x)
print b
Run Code Online (Sandbox Code Playgroud)
我得到-2.45630795891e-05答案。我究竟做错了什么?
我必须在一个复杂的积分中使用dirac delta,并希望看到它如何与一个简单的情况一起工作,但它返回错误的答案.我在下面做错了什么线索?
from sympy import DiracDelta
from scipy import integrate
def f(x):
return x*DiracDelta(x-1)
b, err = integrate.quad(f, 0, 5)
print b
Run Code Online (Sandbox Code Playgroud)
这会返回,0.0而不应该返回.