在数组 x 中找到一个值,使它在数组 y 中的对应值最大化
Finding a value in array x that maximizes its corresponding value in array y
我有两个数组。
第一个数组称为 ret_arr,它包含不同投资组合的 return。
第二个数组称为 vol_arr,它包含相同投资组合的波动率。
如果我想在vol_array中找到一个0.2±0.01的元素,使其在ret_arr中的对应元素最大化,我该怎么做?
我提供 0.01 容差的原因是因为 vol_arr 中的数字不会正好是 0.2,我想在该波动水平附近采样很多点。
我知道我可以做类似 vol_arr.sort()
和 ret_arr.sort()
的事情,然后观察它们以确定哪个在每个波动水平上具有最佳 return,但它有办法将其自动化?
我的第一次尝试是 运行 这个:
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
中找到最接近我提供的值的元素。
我宁愿提供波动率水平,给它一些公差,并让代码循环遍历该公差范围内的所有值,并告诉我波动率水平在定义的最佳公差范围内的指数 return.
假设我正确理解你的问题,如果你想在可迭代的 a
中找到使 b
中的相应值最大化的元素:
import numpy as np
max_index = np.argmax(b)
a[max_index]
这当然要求a
和b
长度相同
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]
我有两个数组。
第一个数组称为 ret_arr,它包含不同投资组合的 return。 第二个数组称为 vol_arr,它包含相同投资组合的波动率。
如果我想在vol_array中找到一个0.2±0.01的元素,使其在ret_arr中的对应元素最大化,我该怎么做?
我提供 0.01 容差的原因是因为 vol_arr 中的数字不会正好是 0.2,我想在该波动水平附近采样很多点。
我知道我可以做类似 vol_arr.sort()
和 ret_arr.sort()
的事情,然后观察它们以确定哪个在每个波动水平上具有最佳 return,但它有办法将其自动化?
我的第一次尝试是 运行 这个:
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
中找到最接近我提供的值的元素。
我宁愿提供波动率水平,给它一些公差,并让代码循环遍历该公差范围内的所有值,并告诉我波动率水平在定义的最佳公差范围内的指数 return.
假设我正确理解你的问题,如果你想在可迭代的 a
中找到使 b
中的相应值最大化的元素:
import numpy as np
max_index = np.argmax(b)
a[max_index]
这当然要求a
和b
长度相同
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]