Exclude the NaN, 0, empty and Inf values ​​from the analysis.

100 ビュー (過去 30 日間)
Luccas S.
Luccas S. 2022 年 2 月 11 日
コメント済み: Luccas S. 2022 年 2 月 11 日
When calculating the PE value, I would like it not to calculate when Ia_future = 0, Nan or Inf.
I believe the way I did it, it's still calculating. Because some PE values ​​are still Inf.
Or if there was some way to exclude those values. The problem is that I need to plot a (t,PE) graphic and if I exclude some PE values ​​the two will have different dimensions and I will not be able to analyze the graph..
for n = 4:size(t,1)
X = [Ia(n-1,1) Ia(n-2,1) ; Ia(n-2,1) Ia(n-3,1)];
future = [Ia(n,1) ; Ia(n-1,1)];
C = X\future;
Ia_future(n,1) = C(1,1)*Ia(n,1)+C(2,1)*Ia(n-1,1);
if (isnan(Ia_future(n, 1)) || isinf(Ia_future(n,1) || isempty(Ia_future(n,1) || Ia_future(n,1)==0))) %|| %(isnan(p(n, 1)) || p(n, 1) == 0)
continue
end
PE(n,1)=(Ia(n,1)+Ia_future(n,1))/(2000/5);
end

採用された回答

Benjamin Thompson
Benjamin Thompson 2022 年 2 月 11 日
Vectorize your calculations using index vectors. For example:
>> Test = [0 1 inf NaN]
Test =
0 1 Inf NaN
>> Inan = isnan(Test)
Inan =
1×4 logical array
0 0 0 1
>> Iinf = isinf(Test)
Iinf =
1×4 logical array
0 0 1 0
>> Igood = ~isinf(Test) & ~isnan(Test)
Igood =
1×4 logical array
1 1 0 0
Then you can calculate PE as a function of Ia_future outside the for loop, something like:
PE(Igood,1)=(Ia(Igood,1)+Ia_future(Igood,1))/(2000/5);
Only the rows of PE corresponding to where Igood is one will be updated. You may need to calculate the index vector looking at both Ia and Ia_future if they can have bad values in different spots.
  2 件のコメント
Luccas S.
Luccas S. 2022 年 2 月 11 日
編集済み: Luccas S. 2022 年 2 月 11 日
Cool, I tested it here and it worked, you can do several things with this logic, I think.
If I wanted to ignore the values of PE>1 and PE<0 would it be possible to do something like that too?
Thanks!
Benjamin Thompson
Benjamin Thompson 2022 年 2 月 11 日
Yes you can define an index vector using any kind of comparison test.

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

その他の回答 (1 件)

Image Analyst
Image Analyst 2022 年 2 月 11 日
Is this helpful:
data = [0, 9, inf, NaN, 42];
mask = (data ~= 0) & isfinite(data)
mask = 1×5 logical array
0 1 0 0 1
extractedData = data(mask)
extractedData = 1×2
9 42
Using isfinite() takes the place/combines both ~isinf() and ~isnan() all into one simple function.
  1 件のコメント
Luccas S.
Luccas S. 2022 年 2 月 11 日
Okay, I didn't know about this isfinite function. Thanks too !

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

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by