フィルターのクリア

Force nansum to equal NaN (and not 0)

3 ビュー (過去 30 日間)
Christoffer Benneballe
Christoffer Benneballe 2020 年 1 月 28 日
Hi Mathworks
I have had a lot of luck with previous questions, so I will try once more. The question have sort of already been answered before here, but I can seem to get the suggestion to work:
Basically, I have a matrix of some numbers (and a lot of NaNs) that I want to multiply by a similar matrix and take the nansum (line 168-171) as:
for i = 1:(size(retSize1Value1,1))
tmp_i = nansum(omega(i,:).*retSize1Value1(i,:));
returnMarket(i,1) = tmp_i(1);
end
returnMarket(all(isnan(omega)&isnan(retSize1Value1),1)) = NaN;
I have tried the suggestion in the other post (line 173) after the for loop.
Later I will take the mean, so the issue is, that if nansum is a product of NaNs Matlab fill out the value to zero and not NaN!
I hope you will save me once more.
All the best,
Christoffer

採用された回答

Spencer Chen
Spencer Chen 2020 年 1 月 28 日
Try:
returnMarket(all(isnan(omega)&isnan(retSize1Value1),2)) = NaN;
You need to run all() on dimension 2 instead of dimension 1.
A few more tips on your code:
1. You will find your problem easier to debug if you reduce the complexity of your expressions. i.e. Code the above line in 2 steps:
nanmask = all(isnan(omega)&isnan(retSize1Value1),2);
returnMarket(nanmask) = NaN;
2. Your for loop can be easily converted into matrix operations, which tends to improve speed and helps you to think more Matlab-like. I believe the below produces an equivalent result to your for loop:
tmp_i = omega .* retSize1Value1;
returnMarket = nansum(tmp_i,2);
Blessings,
Spencer
  1 件のコメント
Christoffer Benneballe
Christoffer Benneballe 2020 年 1 月 29 日
Thank you, Spencer!
It works now - really nice!
And appreciate your suggestions - I cannot seem to get the second part to function as suggested under 2.
Tried to implement it as follows and also tried to comment out the last term. I just get returnMarket = 0.
for i = 1:(size(retSize1Value1,1))
tmp_i = nansum(omega(i,:).*retSize1Value1(i,:));
returnMarket = nansum(tmp_i,2);
returnMarket(i,1) = tmp_i(1);
end

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

その他の回答 (0 件)

カテゴリ

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

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by