如何用NaN填充两个向量之间的差以使长度相等



我正在寻找一种快速的方法来比较两个不同长度的向量,并用NaN值填充较短数组的缺失位置。

示例:

a = [2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2102 2103 2104 2105 2106 2108 2109 2110 2111]
b = [2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2106]

我想比较ba,在任何有差异的地方,我都需要一个NaN值,这样它们最终都有相同的长度:

c = [NaN 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 NaN  NaN NaN NaN 2106 NaN NaN NaN NaN]

我想我可以使用setdiff来找出ab之间的差异:[s,idx] = setdiff(a,b)

但我不知道将NaN值插入b的最佳方式是什么,因为如果执行例如b(idx(1)) == NaN,那么我会覆盖第一个元素中b中的内容。有人能给我指正确的方向吗?

我的假设是,ba的子集。如果b中有不在a中的元素,请提供一个逻辑,如何处理这种情况。

MATLAB的ismember函数在这里是你的朋友(用Octave 5.2.0和MATLAB在线测试(:

close all;
close all;
clc;
a = [2090, 2091, 2092, 2093, 2094, ...
2095, 2096, 2097, 2098, 2099, ...
2100, 2102, 2103, 2104, 2105, ...
2106, 2108, 2109, 2110, 2111]
b = [2091, 2092, 2093, 2094, 2095, ...
2096, 2097, 2098, 2099, 2100, ...
2106]
% Get indices, where to find values from b in a     
idx = ismember(a, b)
% Create nan vector with the size of a
c = nan(size(a));
% Get correct values from the found indices
c(idx) = a(idx)

输出:

a =
2090   2091   2092   2093   2094   2095   2096   2097   2098   2099   2100   2102   2103   2104   2105   2106   2108   2109   2110   2111
b =
2091   2092   2093   2094   2095   2096   2097   2098   2099   2100   2106
c =
NaN   2091   2092   2093   2094   2095   2096   2097   2098   2099   2100    NaN    NaN    NaN    NaN   2106    NaN    NaN    NaN    NaN

相关内容

  • 没有找到相关文章

最新更新