Matlab:根据日期匹配两个数组(未排序)

时间:2013-06-25 11:03:58

标签: matlab

我有两个日期阵列,A和B,其中大小(A)>尺寸(B)。

A包含每个日期的多个条目(它对应于包含各种数据的单元格)。 B只是开始日期和结束日期之间的所有日期,但也对应于某些数据。

我想创建和数组,C(其中size(C)== size(A),包含B中的行号,对应于A中每行的日期(这样数据可以交叉引用,即根据A和B中的数据执行计算,使用B的行索引来匹配日期。

我可以使用循环和find函数来执行此操作:

for i=length(A)
C(i) = find(A(i) == B);
end

然而,这可能不是最有效的解决方案(考虑到我的大数据集需要相当长的时间)。我“喜欢”只是C = find(A == B),但Matlab不允许这样做。

有没有办法实现不使用循环的相同结果?

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

您可以使用ismember的第二个输出参数,如下所示:

[tf, C] = ismember(A, B);

答案 1 :(得分:0)

你需要的功能是相交的。 像这样使用它:

[a,b,C] = intersect(A,B)

虽然a和b的结果无关紧要。 C的结果是您想要的C

答案 2 :(得分:0)

您可以使用histc的第二个输出作为此

# Put some dates in B
B = datenum('01-Jan-2013') : datenum('05-Jan-2013');

# Make A into a superset of B
A = B(randi(length(B), 1, 20));

# The vector C holds the indexes you want
[tmp, C] = histc(A,B);