我编写了用于计算子集求和的代码,其作用类似于整数值的值,但对于浮点值,它没有给出任何结果。
代码:
import numpy as np
array = np.array([15,1,4,6,3,10,4.2])
num = 8.2
def subsetsum(array,num):
if num == 0 or num < 1:
return None
elif len(array) == 0:
return None
else:
if array[0] == num:
return [array[0]]
else:
with_v = subsetsum(array[1:],(num - array[0]))
if with_v:
return [array[0]] + with_v
else:
return subsetsum(array[1:],num)
print('\nList of Values : ',array)
print('\nSum Desired : ',num)
print('\nValues that add up to sum : ',subsetsum(array,num))
整数值的输出
List of Values : [15 1 4 6 3 10 4]
Sum Desired : 8
Values that add up to sum : [1, 4, 3]
浮动值的输出
List of Values : [ 15. 1. 4. 6. 3. 10. 4.2]
Sum Desired : 8.2
Values that add up to sum : None
我如何使用浮点值?
答案 0 :(得分:2)
您可以简单地使用np.isclose
来计算浮点数比较。因此,要解决您的情况,请将:array[0] == num
上的等式比较替换为:np.isclose(array[0], num)
。
同样,您可能希望在开始时进行类似的修改来修复:num == 0
。
答案 1 :(得分:0)
假设所有数字都大于1,我认为如果你可以消除数组中大于目标的任何元素,你可以加速算法。
我能够让代码对您的算法进行一些修改。
import numpy as np
z=[]
def subsetsum(array,tgt):
if len(array)==1 and array[0]==tgt:
return tgt
elif len(array)<=1:
return z
else:
k,s=[],0
for i in array:
s+=i
k.append(i)
if s==tgt:
z.append([k])
k=[]
return subsetsum(array[1:],tgt)
array = np.array([15,1,4,6,3,10,4.2])
num=8.2
array.sort() #speed up
array=array[array<=num] #speed up
print subsetsum(array,num)