对于每个长度为n + h-1的数组,其值为0和1,我想检查是否存在另一个长度为n的非零数组,其值为-1,0,1,以便所有h内部产品都是零.我天真的做法是
import numpy as np
import itertools
(n,h)= 4,3
for longtuple in itertools.product([0,1], repeat = n+h-1):
bad = 0
for v in itertools.product([-1,0,1], repeat = n):
if not any(v):
continue
if (not np.correlate(v, longtuple, 'valid').any()):
bad = 1
break
if (bad == 0):
print "Good"
print longtuple
Run Code Online (Sandbox Code Playgroud)
如果我们设置n = 19,这是非常慢的,h = 10这是我想要测试的.
我的目标是找到一个长度单一的"好"数组
n+h-1.有没有办法加快这让n = 19和h = 10是否可行?
当前的朴素方法需要2 ^(n + h-1)3 ^(n)次迭代,每次迭代大约需要n次.这是311,992,186,885,373,952次迭代n = 19,h = …
我想优化所有30到30个矩阵,条目为0或1.我的目标函数是决定因素.一种方法是采用某种随机梯度下降或模拟退火.
我看了一下,scipy.optimize但就我所知,它似乎并不支持这种优化.scipy.optimize.basinhopping看起来很诱人,但似乎需要连续变量.
Python中是否有用于此类通用离散优化的工具?
python numpy mathematical-optimization discrete-mathematics scipy
我想迭代所有长度列表,n其元素总和为2.你怎么能有效地做到这一点?这是一种非常低效的方法n = 10.最终我想为'n> 25'这样做.
n = 10
for L in itertools.product([-1,1], repeat = n):
if (sum(L) == 2):
print L #Do something with L
Run Code Online (Sandbox Code Playgroud)