python - 从十个中选择三个随机数并使 x**2+x*yy**2+z 最小
问题描述
假设我得到L=[1, 1, 1, 3, 1, 1, 1, 1, 1, 1]
thenfunc(L)
应该返回-4
, 因为 min(x^2+x*y-y^2+z)=-4
, 对于任何x
, y
, z
in L
。
func
没有三个for
循环的更好的构建方法?
解决方案
我们将计算所有的 unqiue 排列L
以消除重复计算。然后对所有排列执行你的函数,找到最小值。
从中检索一个唯一集合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:
minimum_value = np.min(np.square(x) + np.multiply(x,y) - np.square(y) + z)
推荐阅读
- ruby-on-rails - 按正则表达式模式搜索 ActiveRecord
- c# - 使用 WebRootPath 创建 HostingEnvironment 实例
- javascript - 通过 iframe 从 javascript 中的 url 打印内容
- laravel - 如何在 vue js 中添加加载器
- database - 如何在docker中打oracle补丁
- node.js - NodeJS Mongoose updateOne 每次都不匹配
- swift - 无法将“字符串”类型的值转换为预期的参数类型“玩家?”
- node.js - 更新 findOne()/find()/findById() 返回的文档 - mongoose
- r - R - 将图例分成两列
- python-3.x - XGBoost:操作系统错误:[WinError -529697949] Windows 错误 0xe06d7363 运行具有大型数据集的 XGBClassifier,CPU 模式