Jud*_*udi 5 python numpy generator
我正在尝试写一个快速的模拟程序.作为第一步,我想接受一个输入并执行以下操作:
29.0在我的示例中.27.5, 28.0, 28.5, 29.0, 29.5, 30, 30.5这是我的程序 - 这部分解决了我的问题.
#!/usr/bin/python
def getids(tk):
tk=tk.lower()
r=map(lambda x:x/10.0,range(0,6))
val={'PPP':29}
val={k.lower():v for k,v in val.items()}
if tk in val:
stk_price=val[tk]
for i in r:
stk_price=stk_price + i
print(stk_price)
getids('PPP')
Run Code Online (Sandbox Code Playgroud)
输出是
29.0
29.1
29.3
29.6
30.0
30.5
Run Code Online (Sandbox Code Playgroud)
是否可以使用numpy并在数字周围生成值?感谢任何帮助.
首先是关于设计的几点注意事项:
你可能正在寻找np.arange或者np.linspace.对于您的简单应用,它们基本上是等效的.这尤其正确,因为步进增量为0.5时没有舍入误差.
对于给定的x,例如29,您可以执行以下任一操作:
step = 0.5
price_range = np.arange(x - step * 3, x + step * 4, step)
Run Code Online (Sandbox Code Playgroud)
要么
step = 0.5
price_range = np.linspace(x - step * 3, x + step * 3, 7)
Run Code Online (Sandbox Code Playgroud)
我个人觉得这里linspace更容易理解,因为你只是给它限制和点数.因为arange,您必须记住止损是独占的,因此您必须添加保证金x + step * 3.
我建议像这样重写你的程序:
stocks = {
'PPP': 29,
}
# Notice that this only runs once instead of once per function call now
# casefold is the more generalized unicode version of lower
stocks = {key.casefold: value for key, value in stocks}
def getids(tk, margin=3, step=0.5):
tk = tk.casefold()
if tk in val:
price = val[tk]
return np.linspace(price - margin * step,
price + margin * step, 2 * margin + 1)
return []
print(getids('PPP'))
Run Code Online (Sandbox Code Playgroud)
如果您想要之前的确切输出,只需使用换行符加入元素:
print('\n'.join(map(str, getids('PPP'))))
Run Code Online (Sandbox Code Playgroud)
或等效地,
print('\n'.join(str(x) for x in getids('PPP')))
Run Code Online (Sandbox Code Playgroud)