python - 在数组 x 中找到一个值,使其在数组 y 中的对应值最大化
问题描述
我有两个数组。
第一个数组称为 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
最接近我提供的值的元素。
我宁愿提供 vol 水平,给它一些容差,并让代码循环遍历该容差内的所有值,并告诉我波动率水平在以最佳回报定义的容差内的指数。
解决方案
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]
推荐阅读
- ruby - 权限错误:在使用 ruby sdk 创建 facebook 自定义受众时连接到 Business Manager 以创建此受众
- kotlin - What does a Coroutine Join do?
- javascript - 不允许空格作为输入字段中的第一个输入字符
- mysql - 如何使用查询备份mysql数据库
- eclipse - How to get autocomplete (GoCode) to work with all my imports?
- database - 将 docker 内部创建的迁移脚本复制到外部数据库
- angular - 在数据库中存储 Angular 反应式表单验证规则
- vba - 如何在字段中插入全局变量?
- twitter-bootstrap - Change target background color of transition of buttons in bootstrap 4
- javascript - D3.js 中的链式转换(强制布局)