Compare two vector arrays and if they match set vector array 2 = nan?

So i have two arrays the same size:
time = [0,0,0,0,2,3,4,5,5,6,7,8]';
solution = [1,2,0,0,1,1,2,2,2,0,0,0];
What would be the best way to compare the two and if both are the same make solution 0 = nan;
So the final outcome i would like is solution = [1,2,nan,nan,1,1,2,2,2,0,0,0];
would i use a function such as:
if strfind(time,solution)==0
Do something?
Thanks in adavnce!

 采纳的回答

time = [0,0,0,0,2,3,4,5,5,6,7,8]
time = 1×12
0 0 0 0 2 3 4 5 5 6 7 8
solution = [1,2,0,0,1,1,2,2,2,0,0,0]
solution = 1×12
1 2 0 0 1 1 2 2 2 0 0 0
outcome = solution;
outcome(solution == 0 & time == 0) = nan
outcome = 1×12
1 2 NaN NaN 1 1 2 2 2 0 0 0
It is not clear what you want to have happen in positions where the values are equal, but the values are not 0.

3 个评论

Thanks for this. Sorry, I only wanted the solution's '0s' to = nan WHEN the positions of time & solution both = 0, else ignore and leave the solution's 0 untouched. Any other position that are equal i.e. when time is 2 and solution is 2 should not be changed.
Would this work if it was in a statement:
if outcome(solution == 0 & time == 0)
outcome == 0 = nan;
Thanks
if any(time==0 & solution == 0)
solution(time ==0 & solution==0)=nan;
else
return
end
Used this solution in the end, so the solution is - update where time and solution 0s are equal and if not return to script
solution(time ==0 & solution==0) = nan;
if ~any(isnan(solution)); return; end

请先登录,再进行评论。

更多回答(1 个)

Try this...
time = [0,0,0,0,2,3,4,5,5,6,7,8];
solution = [1,2,0,0,1,1,2,2,2,0,0,0];
[idx]=find(time==solution);
solution(idx)=[NaN NaN]
solution = 1×12
1 2 NaN NaN 1 1 2 2 2 0 0 0

2 个评论

FIND is not required, logical indexing is simpler and more efficient.
It would be better to allocate a scalar NaN.

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 NaNs 的更多信息

产品

版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by