作为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
并且输出(这里称为“ money”)可以是任何金额,例如--10054.55 EUR或8763.20 EUR。
问题是,我需要获得一个熊猫数据帧中这两个输入的所有组合的所有可能的trd()输出(因此列将是SPREAD值,行将是STOP值)或反之亦然)或一个Numpy矩阵,以稍后再用密度图或轮廓图表示(以水平轴为SPREAD,垂直一个STOP和“货币”输出为颜色)为佳。
我怎么到那里?
非常感谢!
答案 0 :(得分:1)
好吧:
首先,由于您要处理浮点数,因此可以创建一个自定义的step函数以使用下限,上限和step。
然后,您要为每个SPREAD值进行迭代,则需要完成一个STOP范围的循环。这可以通过嵌套循环来实现。在下面,我只是打印出这些值,您可以查看如何将这些值输入到所需的任何数据结构中。
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)
答案 1 :(得分:1)
我的回答与Jesse的回答不太相似,但是当我写完它后,我认为我也可以包括它。我使用字典理解来显示可能输入范围内的结果。可能的输入是从列表理解中创建的:
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)
答案 2 :(得分:0)
以上答案是正确的。但是,如果您要将结果打包到numpy array / pandas数据框中,我建议使用双列表理解和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)