这个问题的目的是提高我使用python和/或算法的技能。
我有两个数组(modes[:,2],modes[:,3]),并试图找出所有可能的唯一组合,其中
modes[i,2]+modes[j,2] = modes[k,2] (within a numerical bound)
AND
modes[i,3]+modes[j,3] = modes[k,3] (within a numerical bound)
现在,我只是使用一个简单的三重嵌套循环来实现这一点:
import numpy as np
# Load the array from file
modes=np.loadtxt('nonzeros.txt')
ebk=modes[:,4].max()
ofile=open('parametric_modes.txt','w')
for k in range(len(modes[:,0])):
for i in range(len(modes[:,0])):
for j in range(i+1,len(modes[:,0])):
# Check for the resonance condition.
if modes[k,2]-0.01 <= modes[i,2]+modes[j,2]\
<=modes[k,2]+0.01 and modes[k,3]-0.01 <=\
modes[i,3]+modes[j,3] <= modes[k,3]+0.01:
# Check the amplitude.
if modes[k,4] >= ebk*2e-3:
print >> ofile,modes[i,4],modes[j,4],modes[k,4],\
modes[i,2],modes[j,2],modes[k,2],\
modes[i,3],modes[j,3],modes[k,3]
ofile.close()
但由于明显的原因,我得到的组合重复。应该有一个更优雅的方法来做这件事(算法或蟒蛇)有什么想法吗?
谢谢!
最佳答案
你可以做O(n^2 logn)。
对数组进行排序。对于i&j的每个组合,执行二进制搜索以获得最接近的k,以符合您的条件。