Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查共振条件-Pythonic/算法改进?_Python_Algorithm - Fatal编程技术网

检查共振条件-Pythonic/算法改进?

检查共振条件-Pythonic/算法改进?,python,algorithm,Python,Algorithm,这个问题的目的是提高我使用python和/或算法的技能 我有两个数组(模式[:,2],模式[:,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 # Loa

这个问题的目的是提高我使用python和/或算法的技能

我有两个数组(模式[:,2],模式[:,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()
将numpy导入为np
#从文件加载数组
modes=np.loadtxt('nonzeros.txt')
ebk=模式[:,4].max()
ofile=open('parametric_modes.txt','w')
对于范围内的k(len(模式[:,0])):
对于范围内的i(len(模式[:,0]):
对于范围内的j(i+1,len(模式[:,0]):
#检查共振情况。
如果模式[k,2]-0.01
l=len(模式[:,0])
[(i,j,k)表示范围内的i(0,l)表示范围内的i(0,l)表示范围内的i(0,l)表示范围内的j(i,l)如果(abs(模式[i,2]+模式[j,2]-模式[k,2])+abs(模式[i,3]+模式[j,3]-模式[k,3])<.01]
您可以执行O(n^2logn)


对数组进行排序。对于i&j的每一个组合,都要进行二进制搜索,以获得与您的条件最接近的k。

您正试图解决两个实例,其中Wikipedia有一个简单的O(N^2)算法。为您的目的调整它应该足够简单。您只需要调整它以使用A+B=C并允许使用边界C,这可能需要使用两个点,而不是C的1,一个下限索引和一个上限索引

您可能需要对两个数组执行此操作,然后检查三元组(i,j,k)是否对两个数组都有效,因为您可能无法同时执行两个数组

l = len(modes[:,0])

[(i, j, k) for i in range(0, l) for i in range(0, l ) for j in range(i, l ) if (abs(modes[i,2]+modes[j,2] - modes[k,2]) + abs(modes[i,3]+modes[j,3] - modes[k,3])) < .01 ]