我有两个日期阵列,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不允许这样做。
有没有办法实现不使用循环的相同结果?
非常感谢您的帮助!
答案 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);