【问题标题】:Loop to test range of variables and find the best ones in Pyhton循环测试变量范围并在 Python 中找到最好的变量
【发布时间】:2022-11-02 09:47:08
【问题描述】:

首先感谢您提供这个向大家学习的绝佳空间,我有以下问题。我创建了一个从多个 API 导入数据的代码,它围绕数据执行各种统计操作。并返回 1 个结果编号,有助于查看模型是否正确。 代码围绕 4 个(或更多)静态变量构建。我想要的是为每个变量创建一个数字范围并测试代码中所有可能的组合,返回前 10 个最高结果数字。 它看起来像这样:


#I would want to test i.e. variable_1 in a range from (-0.004 to 0.004 at 0.001 increments), the same for the other variables until I can get the top 10 highest result_number
variable_1 = 0.004
variable_2 = 0.005
variable_3 = 30
result_number = 0

def my_code():
global variable_1, variable_2, variable_3
#perform all the operations utilizing the variables
return result_number


请让我知道是否清楚,或者您是否知道如何攻击它。 谢谢你!!

我是 Python 新手,所以我仍在尝试找出如何循环并记录最高数字。代码相当长,所以模拟需要几个小时

【问题讨论】:

标签: python


【解决方案1】:

从循环中提取最大结果

best_result = None
for variable_1 in range(-4, 4, 1):
    result = my_code()
    if best_result is None or best_result > result:
        best_result = result

迭代小数(numpy解决方案)

import numpy as np

best_result = None
for variable_1 in np.arange(-0.004, 0.004, 0.001):
    result = my_code()
    if best_result is None or best_result > result:
        best_result = result

迭代多个变量(numpy & itertools 解决方案)

import numpy as np
from itertools import product

variable_range = np.arange(-0.004, 0.004, 0.001)

best_result = None
for (variable_1, variable_2, variable_3) in product(variable_range, variable_range, variable_range):
    result = my_code()
    if best_result is None or best_result > result:
        best_result = result

当然,如果你的变量有不同的范围,你需要单独定义它们,并在product中相应地使用它们。

【讨论】:

  • 这很有帮助!!!您将如何记录实现该结果的变量。正如我所提到的,它必须遍历所有变量及其可能的组合。
  • @PythonNoob 在循环外声明一个空列表,例如best_results = [],并在 if 语句内将变量-结果组合作为元组存储在列表中,例如 best_results.append((variable_1, variable_2, variable_3, result))
  • 杰出的!谢谢你!
  • @PythonNoob 考虑支持答案并接受它作为解决方案,如果它解决了你的问题
  • KeyError 与您或我发布的任何代码无关。这是一个新问题,因此需要一个新线程
【解决方案2】:

我会使用 numpy 创建带小数的值列表,然后您可以检查该值是否在此列表中:

import numpy as np

variable_1 = 0.004
variable_2 = 0.005
variable_3 = 30
result_number = 0

def my_code():
    global variable_1, variable_2, variable_3
    result_number = 0
    result_number += variable_1 in  np.arange(-0.004,0.005,0.001)
    result_number += variable_2 in  np.arange(-0.004,0.005,0.001)
    result_number += variable_3 in  np.arange(22,28,1)
    return result_number


my_code()

像这样的东西。考虑到:

np.arange(start,stop,step) 创建一个数组,如:[start,start+step,start+2*step,... start+k*step] 直到 start+k*step<stop 所以,你必须选择 stop> '你的最后一个价值寻求'(在你的例子中 stop>0.004 -> stop = 0.005

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2018-08-05
    相关资源
    最近更新 更多