让我们来描述一下这个问题。例如,我的矩阵形状为(3,2,4)
price_path = np.array([[[100, 130, 150, 160],
[100, 130, 150, 160]],
[[100, 80, 70, 60],
[100, 80, 70, 60]],
[[100, 110, 60, 80],
[100, 110, 60, 80]]])在这种情况下,3表示模拟价格路径的次数(如Monte框架)2表示金融资产的数值4表示时间段的数值(以天为单位)。
金融资产的数量如下:
quantites = np.array([[ 1],
[-2]])另外,对于金融资产,引入了一个特殊的特征,即日常结算。
我对两个案件有两项职能:
如果所有资产都有每日结算功能,则返回:
> quantities * (price_paths[:, :, 1:] - price_paths[:, :, :-1])[[[ 30, 20, 10],
[-60, -40, -20]],
[[-20, -10, -10],
[ 40, 20, 20]],
[[ 10, -50, 20],
[-20, 100, -40]]])如果所有资产都没有该特性,则为
> quantities * price_paths[:, :, 1:] [[[ 130, 150, 160],
[-260, -300, -320]],
[[ 80, 70, 60],
[-160, -140, -120]],
[[ 110, 60, 80],
[-220, -120, -160]]])是否有时间效率(numpy)方法来使函数在并非所有资产都有日常结算的情况下工作?例如,:第一个资产有它,第二个资产没有它,然后函数返回:
[[[ 30, 20, 10],
[-260, -300, -320]],
[[ -20, -10, -10],
[-160, -140, -120]],
[[ 10, -50, 20],
[-220, -120, -160]]])发布于 2022-03-27 11:50:36
我不能百分之百肯定我是否正确地理解了你,但我的结果似乎是你想要的(至少对于这个小测试用例)。
>>> import numpy as np
>>> price_paths = np.array([[[100, 130, 150, 160],
... [100, 130, 150, 160]],
...
... [[100, 80, 70, 60],
... [100, 80, 70, 60]],
...
... [[100, 110, 60, 80],
... [100, 110, 60, 80]]])
>>> quantities = np.array([[ 1],
... [-2]])
>>> ds = [True, False]
>>> # Let's make sure `ds` is an array as well
>>> ds = np.array(ds)注意,第二个方程只是第一个方程的第一部分。所以,对于那些ds是False的部分,需要有False零。
定义一个与quantities重复的助手变量,但是将相关的值设置为0,其中ds是False。
>>> quantities2 = quantities * ds.reshape(-1, 1)
>>> quantities2
array([[1],
[0]])现在,将第一个方程分为两部分,并将它们相加在一起:
>>> quantities * price_paths[:, :, 1:] - quantities2 * price_paths[:, :, :-1]
array([[[ 30, 20, 10],
[-260, -300, -320]],
[[ -20, -10, -10],
[-160, -140, -120]],
[[ 10, -50, 20],
[-220, -120, -160]]])https://stackoverflow.com/questions/71635801
复制相似问题