【问题标题】:Array intersection issue (Matlab)数组相交问题(Matlab)
【发布时间】:2015-11-20 05:43:29
【问题描述】:

我正在尝试在 Matlab 中执行两个数组的交集,但我找不到方法。

我要相交的数组是:

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

但是,如果我尝试将 array1 与 array3 相交(请参阅下面的 array3),[dur, itimes, inewtimes ] = intersect(array3,char(array1));该相交会在没有任何错误的情况下执行。

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

【问题讨论】:

  • 首先:将图像转换为实际的编码文本,使实际尝试您的代码更容易。第二:由于您使用的是时间,因此使用 datenum 或 datevec 将日期/时间转换为数字会使比较容易得多。
  • 嗯,试试 Array2 = Array2{:};
  • @GameOfThrows: 如果我尝试 Array2=Array2{:};结果,我得到了一个 1x1 元胞数组。
  • @A.Visser:我已将 datenum 函数应用于 array1,然后我尝试与数组相交,但它也不起作用:-(.
  • 你的问题是Arrays的格式不一样,你想把它们统一起来,可以通过cellstr(Array1) cellstr(Array2)把所有东西都变成CellArrays,然后相交。

标签: arrays matlab cell duration intersect


【解决方案1】:

只是为了便于阅读,您的数组格式不同,您希望它们相同。有很多选项可供您选择,就像@Visser 建议的那样,您可以将日期/时间转换为允许更快计算的长整数,或者您可以将它们保留为字符串,甚至将它们转换为字符(就像您对 char 所做的那样(数组2))。

这是我的例子:

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 文件。

【讨论】:

  • 感谢 GameOfThrows。 vertcat(array2{:,:}) 工作。我不知道 array2 是一个单元格数组,其中每个单元格只有一个字符串。这就是问题所在。
  • @Sarah 是的,我也没有意识到,'String' 表明它在一个单元格中,你所拥有的是''String','String'',这有时会发生当您阅读 csv 或 txt 文件时。
【解决方案2】:

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

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

您的第二个数组应使用datenum 进行转换,然后使用cell2mat 使其成为矩阵。最后,使用ismember 找到交点:

InterSect = ismember(array2,array1);

【讨论】:

  • 如果我尝试: datenum(array2);我收到以下错误:'DATENUM 失败。输入 DATEVEC 不是字符串数组。
  • 屏幕截图中 array2 中的引号将其标记为字符串。先试试 cell2mat,再试试 datenum。
  • 如果我尝试 cell2mat(array2),我现在会收到以下错误:'CELL2MAT 不支持包含元胞​​数组或对象的元胞数组。'
猜你喜欢
  • 1970-01-01
  • 2012-01-11
  • 2011-01-24
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多