当B不是NaN时,显示A和B之间的差异

时间:2016-06-28 11:00:21

标签: matlab

A有两个矩阵True<1x100 double>。在基质B的一些列中存在NaN。我想要做的是在A和B之间得到差异(比如A比B高5),其中A和B都存在。我想将它显示为局部最大值,只需使用plot(A,B)打印出来。

示例:当max(A)= 20且B = 10时我想要显示:A比B多10个。然后当A再次变为30时我想要显示:max(A)比B多20个

非常感谢帮助!

2 个答案:

答案 0 :(得分:1)

ValidData = ~isnan(A) & ~isnan(B); % Get all indices where both exist
plot(A(ValidData),B(ValidData));

isnan为您提供NaN的所有元素,否定此(~),您将获得所有非NaN值。然后,这可以用作AB的逻辑索引。

要获得最大值,请执行AndrasDeak suggests

nanmax(A-B)

更新:显然max现在默认省略NaN值,因此您可以直接使用它:

[MaxValue,MaxPosition] = max(A-B);

答案 1 :(得分:0)

我不确定你想要忽略nan并将矢量减少到数字,或者只是忽略其中一个值为nan的部分。对于后一种情况:

%show you the difference
C=A-B
% ~ means you ignore that output, and the second output of max is the postion
[~,position]=max(A-B);
disp(['At Position ' num2str(position) ' A is ' num2str(A(position)) ' and ' num2str(A(position)-B(position)) ' bigger than B'])