Effacer les filtres
Effacer les filtres

define the 1/K strategy

2 vues (au cours des 30 derniers jours)
Qian cao
Qian cao le 1 Nov 2015
Commenté : Qian cao le 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

Réponse acceptée

John D'Errico
John D'Errico le 1 Nov 2015
Modifié(e) : dpb le 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
  1 commentaire
Qian cao
Qian cao le 1 Nov 2015
Thank you a lot!!

Connectez-vous pour commenter.

Plus de réponses (1)

dpb
dpb le 1 Nov 2015
wt=bsxfun(@rdivide,B>0,sum(B>0,2));
  1 commentaire
Qian cao
Qian cao le 1 Nov 2015
Many thanks:)

Connectez-vous pour commenter.

Catégories

En savoir plus sur Financial Toolbox dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by