获取两变量函数的所有可能结果-Python 3

获取两变量函数的所有可能结果-Python 3,python,python-3.x,function,Python,Python 3.x,Function,作为一名Python初学者,我在尝试解决一项特定任务时遇到了困难,我希望有人能帮我一把,因为我找不到一种方法,我非常感激。因此,这是我的问题: 我做了一个函数,需要两个输入。它相当大,但为了调查起见,我们可以这样说: def trd(SPREAD,STOP): money = SPREAD * STOP - 10 * STOP return(money) 两个输入的值都是浮动范围,彼此之间的差值为0.01,因此它们的可能值可以是这些值,例如: 价差:2.50,2.51,2.52

作为一名Python初学者,我在尝试解决一项特定任务时遇到了困难,我希望有人能帮我一把,因为我找不到一种方法,我非常感激。因此,这是我的问题:

我做了一个函数,需要两个输入。它相当大,但为了调查起见,我们可以这样说:

def trd(SPREAD,STOP):
    money = SPREAD * STOP - 10 * STOP
    return(money)
两个输入的值都是浮动范围,彼此之间的差值为0.01,因此它们的可能值可以是这些值,例如:

价差:2.50,2.51,2.52。。。直到3点50分

停止:1.00,1.01,1.02。。。直到1点50分

而产出,在这里命名为货币,可以是任何金额,比如-10054.55欧元或8763.20欧元

问题是,我需要在一个数据帧中获得这两个输入的所有组合的所有可能的trd输出,因此列将是扩展值和行,停止值或其他方式,或者可能是Numpy矩阵,无论是在密度图还是等高线图中,水平轴将展开,垂直一站和这些货币输出都将是颜色

我怎么去那里

提前多谢

好吧,那么:

首先,由于您处理的是浮动,因此可以创建一个自定义的步长函数来使用,该函数采用下限、上限和步长

然后,您需要对每个排列值进行迭代,您需要完成停止范围的循环。这可以通过嵌套循环实现。在下面,我只是打印出这些值,您可以查看如何将这些值输入到您想要的任何数据结构中

def trd(SPREAD,STOP):
    money = SPREAD * STOP - 10 * STOP
    return(money)

def irange(start, stop, step):
    x = start
    while x < stop:
        yield x
        x += step

def jrange(start, stop, step):
    x = start
    while x < stop:
        yield x
        x += step

for i in irange(2.50,3.50,0.01):
    for j in jrange(1.00,1.50,0.01):
        print(i) #current value of SPREAD
        print(j) #current value of STOP
        z = trd(i,j) #current value of trd(SPREAD,STOP)
        print(z)
好吧,那么:

首先,由于您处理的是浮动,因此可以创建一个自定义的步长函数来使用,该函数采用下限、上限和步长

然后,您需要对每个排列值进行迭代,您需要完成停止范围的循环。这可以通过嵌套循环实现。在下面,我只是打印出这些值,您可以查看如何将这些值输入到您想要的任何数据结构中

def trd(SPREAD,STOP):
    money = SPREAD * STOP - 10 * STOP
    return(money)

def irange(start, stop, step):
    x = start
    while x < stop:
        yield x
        x += step

def jrange(start, stop, step):
    x = start
    while x < stop:
        yield x
        x += step

for i in irange(2.50,3.50,0.01):
    for j in jrange(1.00,1.50,0.01):
        print(i) #current value of SPREAD
        print(j) #current value of STOP
        z = trd(i,j) #current value of trd(SPREAD,STOP)
        print(z)

我的答案与杰西的答案并不太相似,但正如我写出来的那样,我想我也可以把它包括在内。我使用字典理解来显示可能输入范围的结果。可能的输入是从列表中创建的:

def trd(SPREAD,STOP):
    money = SPREAD * STOP - 10 * STOP
    return(money)

max_spread = 0.2
max_stop = 0.2
step = 0.01

spread_values = [i*step for i in range(0, int(max_spread / step))]
stop_values = [i*step for i in range(0, int(max_stop / step))]

results = {
  spread_value: {
    stop_value: trd(spread_value, stop_value)
    for stop_value in
    stop_values
  }
  for spread_value in
  spread_values
}

print(results)

我的答案与杰西的答案并不太相似,但正如我写出来的那样,我想我也可以把它包括在内。我使用字典理解来显示可能输入范围的结果。可能的输入是从列表中创建的:

def trd(SPREAD,STOP):
    money = SPREAD * STOP - 10 * STOP
    return(money)

max_spread = 0.2
max_stop = 0.2
step = 0.01

spread_values = [i*step for i in range(0, int(max_spread / step))]
stop_values = [i*step for i in range(0, int(max_stop / step))]

results = {
  spread_value: {
    stop_value: trd(spread_value, stop_value)
    for stop_value in
    stop_values
  }
  for spread_value in
  spread_values
}

print(results)

以上答案是正确的。但是,如果要将结果打包到numpy array/pandas dataframe中,我建议使用双列表理解和numpy函数:

import numpy as np
import pandas as pd

def trd(SPREAD,STOP):
    money = SPREAD * STOP - 10 * STOP
    return(money)

def build_matrix(spread_lo, spread_hi, spread_range, 
                 stop_lo, stop_hi, stop_range):

    spread_list = np.arange(spread_lo, spread_hi, spread_range)
    stop_list = np.arange(stop_lo, stop_hi, stop_range)

    wannabe_matrix = [[trd(spread, stop) 
                       for spread in spread_list]
                      for stop in stop_list]

    # Transpose it as you wish. Note that wannabe_matrix is list of numpy arrays, 
    # so transposition is easier after you build pandas dataframe
    df = pd.DataFrame(wannabe_matrix, columns=spread_list, index=stop_list).T

    return df


build_matrix(1.50, 2.00, 0.05, 1.0, 1.25, 0.05)

以上答案是正确的。但是,如果要将结果打包到numpy array/pandas dataframe中,我建议使用双列表理解和numpy函数:

import numpy as np
import pandas as pd

def trd(SPREAD,STOP):
    money = SPREAD * STOP - 10 * STOP
    return(money)

def build_matrix(spread_lo, spread_hi, spread_range, 
                 stop_lo, stop_hi, stop_range):

    spread_list = np.arange(spread_lo, spread_hi, spread_range)
    stop_list = np.arange(stop_lo, stop_hi, stop_range)

    wannabe_matrix = [[trd(spread, stop) 
                       for spread in spread_list]
                      for stop in stop_list]

    # Transpose it as you wish. Note that wannabe_matrix is list of numpy arrays, 
    # so transposition is easier after you build pandas dataframe
    df = pd.DataFrame(wannabe_matrix, columns=spread_list, index=stop_list).T

    return df


build_matrix(1.50, 2.00, 0.05, 1.0, 1.25, 0.05)

一定范围内的所有可能输出?还是所有可能的输出?这是不可能的Hi Jesse,我的意思是在一个范围内的所有可能的偶数,因此,例如,SPREAD的值从2.50到3.50,彼此之间的差值为0.01,总共有100种可能。所以,如果我能有100种扩散的可能性和50种停止的可能性,我知道我的函数trd将有5000个输出,稍后我必须表示。对不起,如果不清楚的话!一定范围内的所有可能输出?还是所有可能的输出?这是不可能的Hi Jesse,我的意思是在一个范围内的所有可能的偶数,因此,例如,SPREAD的值从2.50到3.50,彼此之间的差值为0.01,总共有100种可能。所以,如果我能有100种扩散的可能性和50种停止的可能性,我知道我的函数trd将有5000个输出,稍后我必须表示。对不起,如果不清楚的话!这看起来很棒,我将把它与pandas.DataFrame.at结合起来,填充一个数据框,稍后我将使用它来表示所有内容。谢谢另请参见下面@OliverRadini的答案,并给出+10分:如果您选择不使用Pandas或Numpy,他很友好地向您展示了如何将其放入列表中。这看起来很好,我将它与Pandas.DataFrame.at组合,以填充一个数据框,稍后我将使用该数据框来表示所有内容。谢谢另请参见下面@OliverRadini的答案,并给出+10分:如果您选择不使用Pandas或Numpy,他已向您展示了如何将其放入列表中。我认为我还可以更轻松地将其用于后面的表示,因此非常感谢@我很高兴这很有用,祝你好运!我想我也可以用它来表示后一种更简单的方式,所以非常感谢@我很高兴这很有用,祝你好运!