フィルターのクリア

define the 1/K strategy

2 ビュー (過去 30 日間)
Qian cao
Qian cao 2015 年 11 月 1 日
コメント済み: Qian cao 2015 年 11 月 1 日
Hi, I have a matrix
B =
0 9 7 0 0
0 9 7 6 0
0 2 7 6 0
8 0 4 2 0
rows represent time series and columns represent assets. In each row ( time) I need to get a strategy which allocates 1 equally to assets that do not equal zero. The results for the strategy s should =[0 1/2 1/2 0 0; 0 1/3 1/3 1/3 0;0 1/3 1/3 1/3 0;1/3 0 1/3 1/3 0]. My code is as follows but I am looking for a more efficient solution. Thank you.
weight=zeros(4,5);
for r=1:4
countzero=0;
index=[];
for c=1:5
if B(r,c)==0
weight(r,c)=0;
else countzero=countzero+1;
index=[index,c];
end
end
weight(r,index)=1/countzero;
end

採用された回答

John D'Errico
John D'Errico 2015 年 11 月 1 日
編集済み: dpb 2015 年 11 月 1 日
Learn to think in terms of matrices, and operations on them. Finally, learn to use tools like bsxfun, which helps greatly on these problems.
You want to create a new matrix, with zero where you have zeros, and 1 over the number of non-zeros in that row of your array.
W = (B ~= 0);
W = bsxfun(@rdivide,W,sum(W,2));
W =
0 0.5 0.5 0 0
0 0.33333 0.33333 0.33333 0
0 0.33333 0.33333 0.33333 0
0.33333 0 0.33333 0.33333 0
  1 件のコメント
Qian cao
Qian cao 2015 年 11 月 1 日
Thank you a lot!!

サインインしてコメントする。

その他の回答 (1 件)

dpb
dpb 2015 年 11 月 1 日
wt=bsxfun(@rdivide,B>0,sum(B>0,2));
  1 件のコメント
Qian cao
Qian cao 2015 年 11 月 1 日
Many thanks:)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeFinancial Toolbox についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by