考虑以下儒略日期数组
Jday1 = datenum('2011-01-01 00:00','yyyy-mm-dd HH:MM'):60/(60*24):...
datenum('2011-12-31 23:00','yyyy-mm-dd HH:MM');
Jday2 = datenum('2011-04-01 00:00','yyyy-mm-dd HH:MM'):60/(60*24):...
datenum('2011-12-31 23:00','yyyy-mm-dd HH:MM');
Jday3 = datenum('2011-02-06 00:00','yyyy-mm-dd HH:MM'):60/(60*24):...
datenum('2011-12-31 22:00','yyyy-mm-dd HH:MM');
它们的长度都不同,并且其中的时间也不同。
如何找到 3 个数组中哪些日期相同,即返回所有数组之间一致的日期时间的索引?
我知道如果它们大小相同我可以使用 strcmp 但如果它们的长度不同(如示例中所示)我该怎么办?另外,由于数组的数量是 3 而不是 2,因此 strcmp 在这里也会成为一个问题。
Use intersect
:
common_dates = intersect(intersect(Jday1, Jday2), Jday3);
或者如果您还需要索引(基于@Robert P.下面的评论,请注意内部位置的变化)intersect
):
[common_dates, idx] = intersect(Jday1, intersect(Jday2, Jday3));
UPDATE
如果您有多个数组要相交,请编写一个小函数来处理该作业:
function varargout = intersectn(varargin)
narginchk(2, Inf);
nargoutchk(0, 2);
x = varargin{nargin};
for i = nargin-1:-1:1
[x, idx] = intersect(varargin{i}, x);
end
if nargout > 1, varargout{2} = idx; end
if nargout > 0, varargout{1} = x; else disp(x); end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)