我有4个ndarray,分别是link_start(shape=(74328,1)),link_start5(shape=(4310278,5)),link_end(shape=(74328,1)),link_end5(shape=4310278,5)
我需要分别遍历去比较link_start与link_start5和link_end与link_end5,做比较的目的是只要link_start[i]这个元素在link_start5[j]中存在且link_end[i]这个元素在link_end5[j]中也存在,那么我的原始数据列表中的第j条就是我需要进一步处理的数据。
列表中的数据都是数值,形如这样:
link_start[1]=[5],link_start5[22145]=[2,6,5,4,3]
link_end[1]=[3],link_end5[22145]=[5,2,7,3,9]
比如存在上面这两组数据,那么原始数据列表中的第22145条就是我需要进一步处理的数据。
代码如下:
#方法1
for i in range(len(link_start)):
for j in range(len(link_start5)):
if np.in1d(link_start[i],link_start5[j]) == True and np.in1d(link_end[i],link_end5[j]) == True:
print(i,j)
#方法2
for i in range(len(link_start)):
for j in range(len(link_start5)):
if ((link_start[i] == link_start5[j]).sum()) >= 1 and ((link_end[i] == link_end5[j]).sum()) >= 1:
print(i,j)
请问如何能够改进代码从而提高运算效率,是否有什么方法能够尽量避免显式for的使用。
题主对问题的描述不清,比如:
map函数了解一下~
里面一层循环可以用np.isin()函数来判断,外面就想到啥更好的办法了。
学透np就行,python的循环就是垃圾。我虽然没系统学过,但是我知道这个函数不算难。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!