如何解决如何用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]
我想将b
与a
进行比较,在任何有差异的地方,我都需要一个NaN值,以便最终它们具有相同的长度:
c = [NaN 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 NaN NaN NaN NaN 2106 NaN NaN NaN NaN]
我认为我可以使用setdiff
来找出a
和b
之间的区别:
[s,idx] = setdiff(a,b)
但是我不知道将NaN值插入b
的最佳方法是什么,因为如果这样做,例如b(idx(1)) == NaN
,然后覆盖第一个元素中b
中的内容。
有人可以指出我正确的方向吗?
解决方法
我的假设是,b
是a
的子集。如果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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。