numpy-将数组中的每个元素乘以一个比例因子
我有一个数值的numpy数组,还有一个缩放因子列表,我想按每个列向下缩放数组中的每个值numpy-将数组中的每个元素乘以一个比例因子,numpy,Numpy,我有一个数值的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.
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_值
can是一个二维的股票累计回报数组(即:标准化到第1天),其中每行代表一个日期,每列代表一只股票。数据作为每个日期的数组返回
现在我想通过在投资组合中的分配来衡量每只股票的累积回报。因此,对于每个日期(即:每行ndarray
值,将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函数可以优雅简洁地实现我想要的功能
编辑:
我看到我的第一个解决方案已经转换了我的数据,这样我就得到了一个列表,其中包含ndarrays
na_components[0]
现在给出第一批股票的股票价值的ndarray
,每个日期1个元素
我对na_components执行的下一步是通过对每个单独的组成部分求和来计算投资组合的总累积回报
na_pfo_cum_ret = np.sum(na_components, axis=0)
这适用于单个股票收益率列表ndarrays
这种顺序对我来说似乎有点奇怪,但是IIUC,您需要做的就是将na_值
乘以数组(ls_alloc)
:
我不完全清楚你想做什么,但答案很可能是肯定的。我想你想要:
values = np.array( [[ 0, 1, 2, 3 ],
[ 1, 1, 4, 3 ],
[ 2, 1, 6, 3 ],
[ 3, 1, 8, 3 ]] )
ls_alloc = np.array([ 0.1, 0.4, 0.3, 0.2])
以及:
na_components = values * ls_alloc
或:
values = np.array( [[ 0, 1, 2, 3 ],
[ 1, 1, 4, 3 ],
[ 2, 1, 6, 3 ],
[ 3, 1, 8, 3 ]] )
ls_alloc = np.array([ 0.1, 0.4, 0.3, 0.2])
na_components = values * ls_alloc
na_components = values * ls_alloc[:,np.newaxis]