首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结合两种情况的Numpy时间有效方法

结合两种情况的Numpy时间有效方法
EN

Stack Overflow用户
提问于 2022-03-27 11:11:42
回答 1查看 40关注 0票数 0

让我们来描述一下这个问题。例如,我的矩阵形状为(3,2,4)

代码语言:javascript
复制
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表示时间段的数值(以天为单位)。

金融资产的数量如下:

代码语言:javascript
复制
quantites = np.array([[ 1],
                      [-2]])

另外,对于金融资产,引入了一个特殊的特征,即日常结算。

我对两个案件有两项职能:

如果所有资产都有每日结算功能,则返回:

代码语言:javascript
复制
> quantities * (price_paths[:, :, 1:] - price_paths[:, :, :-1])
代码语言:javascript
复制
[[[ 30,  20,  10],
  [-60, -40, -20]],

 [[-20, -10, -10],
  [ 40,  20,  20]],
    
 [[ 10, -50,  20],
  [-20, 100, -40]]])

如果所有资产都没有该特性,则为

代码语言:javascript
复制
> quantities * price_paths[:, :, 1:] 
代码语言:javascript
复制
[[[ 130,  150,  160],
  [-260, -300, -320]],

 [[  80,   70,   60],
  [-160, -140, -120]],
    
 [[ 110,   60,   80],
  [-220, -120, -160]]])

是否有时间效率(numpy)方法来使函数在并非所有资产都有日常结算的情况下工作?例如,:第一个资产有它,第二个资产没有它,然后函数返回:

代码语言:javascript
复制
[[[  30,   20,   10],
  [-260, -300, -320]],

 [[ -20,  -10,   -10],
  [-160, -140, -120]],
    
 [[  10,  -50,   20],
  [-220, -120, -160]]])
EN

回答 1

Stack Overflow用户

发布于 2022-03-27 11:50:36

我不能百分之百肯定我是否正确地理解了你,但我的结果似乎是你想要的(至少对于这个小测试用例)。

代码语言:javascript
复制
>>> 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)

注意,第二个方程只是第一个方程的第一部分。所以,对于那些dsFalse的部分,需要有False零。

定义一个与quantities重复的助手变量,但是将相关的值设置为0,其中dsFalse

代码语言:javascript
复制
>>> quantities2 = quantities * ds.reshape(-1, 1)
>>> quantities2
array([[1],
       [0]])

现在,将第一个方程分为两部分,并将它们相加在一起:

代码语言:javascript
复制
>>> 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]]])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71635801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档