Exclude the NaN, 0, empty and Inf values from the analysis.
122 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
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 个评论
更多回答(1 个)
Image Analyst
2022-2-11
Is this helpful:
data = [0, 9, inf, NaN, 42];
mask = (data ~= 0) & isfinite(data)
extractedData = data(mask)
Using isfinite() takes the place/combines both ~isinf() and ~isnan() all into one simple function.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!