0

我有两个日期数组 A 和 B,其中 size(A) > size(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 不允许这样做。

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

非常感谢您的帮助!

4

3 回答 3

1

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

[tf, C] = ismember(A, B);
于 2013-06-25T13:02:01.320 回答
0

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

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

虽然 a 和 b 的结果无关紧要。结果CC你想要的

于 2013-06-25T11:22:04.477 回答
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);
于 2013-06-25T11:29:24.717 回答