Python 2.7 子集和改进
短版: 使用numpy(在python中)有没有一种方法可以从两个间隔之间的浮点数组计算所有和组合的可能性 完整(长)版本: 在Reddit的多个线程的帮助下,我完成了这个子集求和程序,以找到更接近的权重组合值。(结果必须更高,但尽可能接近,我需要查看所有组合) 但我需要显示非对称区间内的所有结果 numpy有没有一种方法可以计算两个区间之间所有可能的和组合 PS1:对不起,我的英语很差:/ PS2:理想情况下,我喜欢代码更容易理解,这样以后修改它就更容易了 PS3:我在Geany(Linux Mint上)内部启动了我的python程序,执行命令是“python”%f,“有没有一种简单的方法可以让它在多个内核上运行得更快?(不需要对程序进行多线程调整?)Python 2.7 子集和改进,python-2.7,numpy,sum,subset,Python 2.7,Numpy,Sum,Subset,短版: 使用numpy(在python中)有没有一种方法可以从两个间隔之间的浮点数组计算所有和组合的可能性 完整(长)版本: 在Reddit的多个线程的帮助下,我完成了这个子集求和程序,以找到更接近的权重组合值。(结果必须更高,但尽可能接近,我需要查看所有组合) 但我需要显示非对称区间内的所有结果 numpy有没有一种方法可以计算两个区间之间所有可能的和组合 PS1:对不起,我的英语很差:/ PS2:理想情况下,我喜欢代码更容易理解,这样以后修改它就更容易了 PS3:我在Geany(Linux
PS4:不可能以“嗨”或“你好”开始提问?我尝试了两种方法,但每次都消失了。我找到了另一种解决方案,但基于此仍然不是一个好的解决方案:
从numpy导入*
从itertools导入*
montab=[2.95,2.26,3.93,2.38*2,1.98,1.93,1.64,0.53,1.20,2.06,2.18,2.12,3.20,1.29,1.20,2*0.65,1.84*2,
1.85*2, 1.58*3, 1.46*3, (1.48*3+0.22), 1.12*4, 1.18*3, 2.38+0.02, 0.65*5,
3.23, 1.60, 0.58, 4.01, 1.09*3, 0.60, 0, 0]
目标=7
suppaumaxde=0.35
印刷蒙塔布
montab.sort(反向=真)
印刷蒙塔布
库勒='\33[37m'
打印(“\n”)
对于组合中的科隆(montab,4):
如果(sum(colonne)>=target和sum(colonne),这太宽泛了。您要问的具体问题是什么?哦,对不起:/非常简短:有没有一种方法可以使用numpy(python)从两个间隔之间的浮点数组计算所有和组合的可能性?
def subset(array, num, epsilon):
result = []
def find(arr, num, path=()):
if not arr:
return
if (arr[0] >= num and arr[0] <= num + epsilon):
result.append(path + (arr[0],))
else:
find(arr[1:], num - arr[0], path + (arr[0],))
find(arr[1:], num, path)
find(array, num)
return result
def sumColumn(matrix):
return numpy.sum(matrix, axis=1) # axis=1 says "get the sum along the columns"
target = 7.00
suppaumaxde = 0.30
#data = [ 1.98, 1.93, 1.64, 2.06, 2.18, 2.12, 3.20, 1.29, 2*0.65, 1.84*2, 1.85*2]
#, 1.58*3, 1.46*3, (1.48*3+0.22), 1.12*4, 1.85*2, 2*1.84, 2*1.84, 1.18*3, 2.38+0.02, 0.65*5,
data = [ 1.13, 2.26, 3.93, 2.40-0.02, 2.38, 2.27, 1.98, 1.93, 1.64, 2.06, 2.18, 2.12, 3.20, 1.29, 2*0.65, 1.84*2,
1.85*2, 1.58*3, 1.46*3, (1.48*3+0.22), 1.12*4, 1.85*2, 2*1.84, 1.18*3, 2.38+0.02, 0.65*5,
3.23, 1.60, 0.58, 4.01, 1.09*3]
print data
Resultat=subset(data, target, suppaumaxde)
#print subset(data, target, suppaumaxde)
#print(' '.join(map(str, Resultat)))
#print([sum(row) for row in Resultat])
couleur='\33[37m'
print('\n')
for colonne in Resultat:
if (sum(colonne)<=target+(suppaumaxde*1/3)):couleur='\33[42m'
elif (sum(colonne)<=target+(suppaumaxde*2/3)):couleur='\33[43m'
elif (sum(colonne)<=target+(suppaumaxde*3/3)):couleur='\033[91m'
print couleur,sum(colonne),'\033[0m',(colonne)
data.sort(reverse=True)
print('\n')
print data
Resultat=subset(data, target, suppaumaxde)
#print(' '.join(map(str, Resultat)))
print('\n')
for colonne in Resultat:
if (sum(colonne)<=target+(suppaumaxde*1/3)):couleur='\33[42m'
elif (sum(colonne)<=target+(suppaumaxde*2/3)):couleur='\33[43m'
elif (sum(colonne)<=target+(suppaumaxde*3/3)):couleur='\033[91m'
print couleur,sum(colonne),'\033[0m',(colonne)
data.sort()
print('\n')
print data
Resultat=subset(data, target, suppaumaxde)
#print(' '.join(map(str, Resultat)))
print('\n')
for colonne in Resultat:
if (sum(colonne)<=target+(suppaumaxde*1/3)):couleur='\33[42m'
elif (sum(colonne)<=target+(suppaumaxde*2/3)):couleur='\33[43m'
elif (sum(colonne)<=target+(suppaumaxde*3/3)):couleur='\033[91m'
print couleur,sum(colonne),'\033[0m',(colonne)
import numpy as np
def find_nearest(array, value):
array = np.asarray(array)
idx = (np.abs(array - value)).argmin()
return array[idx]
montab = [ 2.95, 2.26, 3.93, 2.38*2, 1.98, 1.93, 1.64, 0.53, 1.20, 2.06, 2.18, 2.12, 3.20, 1.29, 1.20, 2*0.65, 1.84*2,
1.85*2, 1.58*3, 1.46*3, (1.48*3+0.22), 1.12*4, 1.18*3, 2.38+0.02, 0.65*5,
3.23, 1.60, 0.58, 4.01, 1.09*3, 0.60]
cible= 7
print(find_nearest(montab, cible))
from numpy import *
from itertools import *
montab = [ 2.95, 2.26, 3.93, 2.38*2, 1.98, 1.93, 1.64, 0.53, 1.20, 2.06, 2.18, 2.12, 3.20, 1.29, 1.20, 2*0.65, 1.84*2,
1.85*2, 1.58*3, 1.46*3, (1.48*3+0.22), 1.12*4, 1.18*3, 2.38+0.02, 0.65*5,
3.23, 1.60, 0.58, 4.01, 1.09*3, 0.60, 0, 0]
target=7
suppaumaxde = 0.35
print montab
montab.sort(reverse=True)
print montab
couleur='\33[37m'
print('\n')
for colonne in combinations(montab,4):
if (sum(colonne)>=target and sum(colonne)<=target+suppaumaxde):
if (sum(colonne)<=target+(suppaumaxde*1/3)):couleur='\33[42m'
elif (sum(colonne)<=target+(suppaumaxde*2/3)):couleur='\33[43m'
elif (sum(colonne)<=target+(suppaumaxde*3/3)):couleur='\033[91m'
print couleur,sum(colonne),'\033[0m',(colonne)