Resetting original order after sorting out NaN values in the matrix

1 view (last 30 days)
Hey everybody!
I have some problems regarding portfolio optimization and the extraction of weights. My problem can be summarized as fighting with NaNs constantly:
I have a matrix full of returns according to the following:
Asset1 Asset2 Asset3 .... Asset1000
1960_01 0.01 NaN NaN
1960_02 0.015 NaN 0.02
1960_03 -0.02 NaN 0.1
...
2014_12
Now, some assets have many NaNs so I have written a code to keep only those Assets where I have all returns during the time period:
testifnan = all(~isnan(returns)); %this command returns a 1 if there are only NaNs in the column
new_ret = returns(:,testifnan); %returns a matrix with returns of stocks that do not have any NaN
Now, what I receive is a new matrix that is not a 660x1000 matrix as before, but only a 660x200 (800 stocks have only NaNs)
I do all this on a rolling basis, so after running the optimization code, I receive the set of optimal weights. I want these weights (of one optimization) in a 1x1000 matrix with a weight of zero if the asset had only NaNs in that time period.
Now, I created a matrix of zeros: weights = zeros(1,1000) and I want to update the weights in the original order..
I am really struggling with this and hope that somebody can help me out! Also, let me know whether you need more info!
Thank you so much!
Clemens
  1 Comment
the cyclist
the cyclist on 10 Jul 2015
Just an FYI, you could also have done the NaN test in a slightly easier way:
testifnan = any(isnan(returns))

Sign in to comment.

Answers (1)

the cyclist
the cyclist on 10 Jul 2015
Use the index you created on the left-hand side:
weights(not(testifnan),:) = <...>

Categories

Find more on Quadratic Programming and Cone Programming 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!