考虑以下朱利安日期数组
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个数组中哪些日期相同,即返回所有数组之间的一致dateTime的索引?
我知道如果它们的大小相同,我可以使用strcmp,但如果它们的长度不同,我会怎么做?此外,strcmp在这里是一个问题,因为数组的数量为3而不是2。
答案 0 :(得分:4)
使用intersect
:
common_dates = intersect(intersect(Jday1, Jday2), Jday3);
或者如果您还需要索引(基于@Robert P.的评论,请注意内部intersect
位置的变化):
[common_dates, idx] = intersect(Jday1, intersect(Jday2, Jday3));
<强>更新强>
如果要交叉多个数组,请编写一个小函数来处理作业:
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
答案 1 :(得分:0)
由于您将数组存储为datenums而不是字符串,因此您只需将它们与Compare = (Jday1 == Jday2)
进行比较,依此类推。这仅适用于两个向量长度相同的情况。
如果向量具有不同的长度,则可以使用Compare = ismember(Jday1, Jday2)
返回与Jday1
大小相同的数组,并在每个索引i
处返回1(true){{1}可以在集合Jday1(i)
中找到。
Documentation on ismember can be found here
最后,如果您只想返回一个列表等于另一个列表的索引,请尝试Jday2
。