Clear Filters
Clear Filters

define the 1/K strategy

2 views (last 30 days)
Qian cao
Qian cao on 1 Nov 2015
Commented: Qian cao on 1 Nov 2015
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

Accepted Answer

John D'Errico
John D'Errico on 1 Nov 2015
Edited: dpb on 1 Nov 2015
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

More Answers (1)

dpb
dpb on 1 Nov 2015
wt=bsxfun(@rdivide,B>0,sum(B>0,2));

Categories

Find more on Financial Toolbox in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!