JBo*_*org 5 python numpy vectorization
我希望矢量化一个嵌套循环,它将在300,000个列表的列表上工作,每个列表包含3个值.嵌套循环将每个列表的值与其他列表中的对应值进行比较,并且仅附加列表索引,这些索引具有在它们之间具有最大差异0.1的对应值.因此,包含[0.234,0.456,0.567]的列表和包含[0.246,0.479,0.580]的列表将属于此类别,因为它们的相应值(即0.234和0.246; 0.456和0.479; 0.567和0.580)有差异他们之间的差距小于0.1.
我目前使用以下嵌套循环来完成此任务,但目前大约需要58小时才能完成(总计90万亿次迭代);
import numpy as np
variable = np.random.random((300000,3)).tolist()
out1=list()
out2=list()
for i in range(0:300000):
for j in range(0:300000):
if ((i<j) and ((abs(variable[i][0]-variable[j][0]))<0.1) and ((abs(variable[i][1]-variable[j] [1]))<0.1) and ((abs(variable[i][2]-variable[j][2]))<0.1)):
out1.append(i)
out2.append(j)
Run Code Online (Sandbox Code Playgroud)
查看 scipy.spatial; 它有很多功能可以有效地解决此类空间查询;特别是KDTree ,即:
import scipy.spatial
out = scipy.spatial.cKDTree(variable).query_pairs(r=0.1, p=np.infinity)
Run Code Online (Sandbox Code Playgroud)