假设我得到L=[1, 1, 1, 3, 1, 1, 1, 1, 1, 1]
然后func(L)
应该返回-4
,因为min(x^2+x*y-y^2+z)=-4
,x
中的y
,z
,L
。
在没有三个func
循环的情况下构建for
的更好方法是什么?
答案 0 :(得分:0)
我们将计算L
的所有unqiue排列,以摆脱重复的计算。然后在所有排列上执行您的功能,找到最小值。
从L
检索唯一集并将所有排列放入列表中:
import numpy as np
import itertools
L = [1, 1, 1, 3, 1, 1, 1, 1, 1, 1]
np_array = np.unique(L)
调整唯一值的数量不是至少三个时:
int_len = 3 - len(np_array)
if int_len > 0:
np_array = np.pad(np_array, (int_len,0), 'edge')
li = np_array.tolist()
查找长度为3
的所有组合:
perms = list(itertools.combinations_with_replacement(li, 3))
将三个数组列重新分配给相应的变量:
a = np.array(perms)
x = a[:,0]
y = a[:,1]
z = a[:,2]
计算数组中每个排列的函数并执行min over result:
minimum_value = np.min(np.square(x) + np.multiply(x,y) - np.square(y) + z)