gpt4 book ai didi

numpy - 将数组中的每个元素乘以一个比例因子

转载 作者:行者123 更新时间:2023-12-02 08:39:51 26 4
gpt4 key购买 nike

我有一个 numpy 值数组,以及一个比例因子列表,我想按比例缩放数组中的每个值,向下排列每一列

values = [[ 0, 1, 2, 3 ],
[ 1, 1, 4, 3 ],
[ 2, 1, 6, 3 ],
[ 3, 1, 8, 3 ]]
ls_alloc = [ 0.1, 0.4, 0.3, 0.2]

# convert values into numpy array
import numpy as np
na_values = np.array(values, dtype=float)

编辑:澄清:

na_values 可以是股票累积 yield 的二维数组(即:归一化为第 1 天),其中每一行代表一个日期,每一列代表一只股票。数据作为每个日期的数组返回。

我现在想通过每只股票在投资组合中的分配来衡量每只股票的累积返回。因此,对于每个日期(即:ndarray 值的每一行,将 ls_alloc 中的相应元素应用于数组元素)

# scale each value by its allocation
na_components = [ ls_alloc[i] * na_values[:,i] for i in range(len(ls_alloc)) ]

这就是我想要的,但我忍不住觉得一定有办法让 numpy 自动为我做这件事?

也就是我觉得:

na_components = [ ls_alloc[i] * na_values[:,i] for i in range(len(ls_alloc)) ]
# display na_components
na_components
[array([ 0. , 0.1, 0.2, 0.3]), \
array([ 0.4, 0.4, 0.4, 0.4]), \
array([ 0.6, 1.2, 1.8, 2.4]), \
array([ 0.6, 0.6, 0.6, 0.6])]

应该可以这样表达:

tmp = np.multiply(na_values, ls_alloc)
# display tmp
tmp
array([[ 0. , 0.4, 0.6, 0.6],
[ 0.1, 0.4, 1.2, 0.6],
[ 0.2, 0.4, 1.8, 0.6],
[ 0.3, 0.4, 2.4, 0.6]])

是否有一个 numpy 函数可以优雅简洁地实现我想要的功能?

编辑:我看到我的第一个解决方案已经转置了我的数据,这样我就返回了一个 ndarrayslistna_components[0] 现在给出第一只股票的股票值(value)的 ndarray,每个日期 1 个元素。

我使用 na_components 执行的下一步是通过对每个单独的组件求和来计算投资组合的总累积返回

na_pfo_cum_ret = np.sum(na_components, axis=0)

这适用于个股 yield ndarrays 列表。

最佳答案

这个顺序对我来说似乎有点奇怪,但是 IIUC,您需要做的就是将 na_values 乘以 array(ls_alloc) 的结果转置:

>>> v
array([[ 0., 1., 2., 3.],
[ 1., 1., 4., 3.],
[ 2., 1., 6., 3.],
[ 3., 1., 8., 3.]])
>>> a
array([ 0.1, 0.4, 0.3, 0.2])
>>> (v*a).T
array([[ 0. , 0.1, 0.2, 0.3],
[ 0.4, 0.4, 0.4, 0.4],
[ 0.6, 1.2, 1.8, 2.4],
[ 0.6, 0.6, 0.6, 0.6]])

关于numpy - 将数组中的每个元素乘以一个比例因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com