数组交集问题(Matlab)

Array intersection issue (Matlab)

我想在Matlab中进行两个数组的交集,但是找不到方法。

我要相交的数组是:

我试过:[dur, itimes, inewtimes ] = intersect(array2,char(array1)); 但运气不好。

但是,如果我尝试将 array1 与 array3 相交(请参阅下面的 array3),[dur, itimes, inewtimes ] = intersect(array3,char(array1));相交会毫无错误地执行。

为什么我不能将 array1 与 array2 相交?我该怎么做?。谢谢。

您的第一个数组看起来像这样:

array1 = linspace(0,1,86400); % creates 86400 seconds in 1 day

您的第二个数组应使用 datenum 转换,然后使用 cell2mat 使其成为矩阵。最后用ismember求交集:

InterSect = ismember(array2,array1);

只是为了阅读方便,你们的Arrays格式不一样,想让它们一样。您有很多选择,就像@Visser建议的那样,您可以将 date/time 转换为 long int 以便更快地计算,或者您可以将它们保留为字符串,甚至将它们转换为字符(就像您所做的那样用 char(Array2)).

这是我的例子:

A = {'00:00:00';'00:01:01'} %//Type is Cell String
Z = ['00:00:00';'00:01:01'] %//Type is Cell Char
Q = {{'00:00:00'};{'00:01:01'}} %//Type is a Cell of Cells

A = cellstr(A) %//Convert CellStr to CellStr is essentially doing nothing
Z = cellstr(Z) %//Convert CellChar to CellStr
Q = vertcat(Q{:,:}) %// Convert Cell of Cells to Cell of Strings

I = intersect (A,Z) 

>>'00:00:00'
  '00:01:01'

II = intersect (A,Q)
>>'00:00:00'
  '00:01:01'    

这会将您的日期保存为字符串格式,以防您想要将它们导出回 txt/csv 文件。