这个问题的目的是提高我使用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,以符合您的条件。

10-06 01:55