値の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
can は、株式累積リターンの 2 次元配列 (つまり、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関数はありますか?
編集:
私の最初のソリューションが私のデータを転置したことがわかりlist
ましたndarrays
. は、日付ごとに 1 つの要素である、最初の在庫の在庫値の をna_components[0]
与えるようになりました。ndarray
私が実行する次のステップna_components
は、個々のコンポーネントを合計して、ポートフォリオの合計累積リターンを計算することです
na_pfo_cum_ret = np.sum(na_components, axis=0)
これは、個々の株式リターンのリストで機能しndarrays
ます。