我在第一列中有一个带有时间戳的matlab数组A,第二列中有数据:
times = datenum('2014-05-10 12:00'):1/1440:datenum('2014-05-10 13:00');
data = rand(61,1);
A = [times' data];
我有另一个数组B,其中包含应从数组A中删除的行的时间戳:
B = [datenum('2014-05-10 12:10') datenum('2014-05-10 12:45')]';
如何获取包含数组A中数据的数组,而不包含B中列出时间戳的数据?实际上,我正在使用大型数据集,所以我不想使用(嵌套)循环。
答案 0 :(得分:2)
我没有在此计算机上运行matlab许可证来为您测试代码示例,但您可以在向{A}添加setdiff
之前尝试data
功能。如果这样做&#39 ; s不可能,在setdiff
上使用C=A(1:end,1)
并在之后重新分配A.
http://www.mathworks.de/de/help/matlab/ref/setdiff.html
编辑:这是一个有效的代码示例:
[~,ia] = setdiff(A(:,1),B);
A_new = A(ia,:);
答案 1 :(得分:2)
其中一种方法,
C = A(~ismember(A(:,1),B),:);
请注意,在比较浮点数是否相等时需要非常小心,并且根据日期的创建方式,您可能会发现任何直接比较方法都不能达到预期效果。
E.g。
(0.3-(0.2+0.1))==0
ans =
0
双精度是正确的,但往往让人感到惊讶。