【问题标题】:Finding a value in array x that maximizes its corresponding value in array y在数组 x 中找到一个值,使其在数组 y 中的对应值最大化
【发布时间】:2020-06-30 15:48:16
【问题描述】:

我有两个数组。

第一个数组称为 ret_arr,它包含不同投资组合的收益。 第二个数组称为 vol_arr,它包含相同投资组合的波动率。

如果我想在 vol_array 中找到一个 0.2±0.01 的元素,使其在 ret_arr 中的对应元素最大化,我该怎么做?

我提供 0.01 容差的原因是因为 vol_arr 中的数字不会正好是 0.2,我想在该波动率水平附近采样很多点。

我知道我可以执行 vol_arr.sort()ret_arr.sort() 之类的操作,然后通过观察它们来确定在每个波动率水平下哪个具有最佳回报,但有没有办法自动执行此操作?

我的第一次尝试是运行这个:

import numpy as np
def find_nearest(array, value):
    array = np.asarray(array)
    idx = (np.abs(array - value)).argmin()
    return array[idx]

array = ret_arr
print(array)

value = 0.08

print(find_nearest(array, value))

但这只是在ret_arr 中找到最接近我提供的值的元素。

我宁愿提供波动率水平,给它一些容差,并让代码循环遍历该容差内的所有值,并告诉我波动率水平在以最佳回报定义的容差内的指数。

【问题讨论】:

    标签: python arrays numpy minimize maximize


    【解决方案1】:
    import numpy as np
    vol = 0.2
    # Find indices of vol +/- 0.01 in the vol_arr
    indices = np.where((vol_arr>vol-0.01) & (vol_arr<vol+0.01))
    # Find the maximum return in the corresponding ret_arr
    max_return = ret_arr[indices].max()
    # Corresponding index from maximum return
    max_index = ret_arr[indices].argmax()
    # Look up the corresponding volatility
    vol_index = indices[0][max_index]
    vol_value = vol_arr[vol_index]
    

    【讨论】:

      【解决方案2】:

      假设我正确理解您的问题,如果您想在可迭代的a 中找到最大化b 中相应值的元素:

      import numpy as np
      max_index = np.argmax(b)
      a[max_index]
      

      这当然要求ab 具有相同的长度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-24
        • 1970-01-01
        • 2018-07-04
        • 2016-09-23
        • 2011-03-30
        • 1970-01-01
        相关资源
        最近更新 更多