如何用 NaN 填充两个向量之间的差异以使其长度相等?
How to fill differences between two vectors with NaN to make equal lengths?
我正在寻找一种快速方法来比较两个不同长度的向量并用 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, 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
我正在寻找一种快速方法来比较两个不同长度的向量并用 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, 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