必填:
/c
每个输入集中最接近零的数字应为输出中的一位数字。比例必须保持大致恒定,并接受四舍五入误差。
上下文:使用最小的订单将要购买的证券的数量从模型转换为100手的整数。
我可以以非Python的方式强行执行此操作,但我正在寻找要使用的Python函数的指针。我的背景是Java。
答案 0 :(得分:1)
在Python中,您可以使用numpy
进行此类计算。我建议这样的算法:
def process(array):
order_of_magnitude = np.floor(np.log10(np.min(np.abs(array))))
return np.round(array*10**(-order_of_magnitude))
说明:
为此,您将需要安装numpy
。例如,使用pip
或通过Linux发行版。
将您的列表变成如下这样的numpy数组:
array = np.array(your_list)
答案 1 :(得分:1)
忽略您的示例,我实现了要求
每个输入集中最接近零的数字应为输出中的一位数字。比例必须保持大致恒定,并接受四舍五入误差。
此算法通过最接近零的值的绝对值对数据进行归一化,然后将结果乘以9以使最小的数字保持一位数,从而最小化随后的舍入误差。
def normalize(l):
import numpy as np
m = np.min(np.abs(l))
return np.round(l / m * 9).astype(int)
答案 2 :(得分:0)
这是基于@ user8408080答案的正确答案。
import numpy as np
def process(array):
order_of_magnitude = np.floor(np.log10(np.min(np.abs(array)))).astype(int).item()
return np.round(np.asarray(array)*10**(-order_of_magnitude)).astype(int)