如何用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 Online测试):

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,2095,...
     2096,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