【问题标题】:matlab removing redundant objects from a list of objects (arrays)matlab从对象(数组)列表中删除冗余对象
【发布时间】:2013-08-11 19:12:48
【问题描述】:

在 matlab 或 scilab 中,如何删除数组对象列表中的冗余条目?或者将其保存为矩阵?

示例:

p = list();
p(1) = ['a' 'b' 'c'];
p(2) = ['a' 'b' 'c'];
p(3) = ['b' 'a' 'c']

例如,从上面提到的列表开始,我想得到一个列表 q

q(1) = ['a' 'b' 'c'];
q(2) = ['b' 'a' 'c'];

unique 函数仅适用于数组,但不适用于数组列表。我可以通过遍历所有矩阵来手动执行此操作,但效率不高。

【问题讨论】:

  • “冗余条目”是什么意思?您在寻找unique 功能吗?也许您可以显示“我认为 this 是多余的条目”-我们无法读懂您的想法...通常是“如果我从这个开始,我想以那个结束”的方式公式化(和“这是我尝试过的”)是获得有用答案的好方法。
  • 感谢您的评论。我明白你的意思,我会更新我的问题。
  • 现在清楚多了!我会考虑一下 - 它与我通常使用 Matlab 的方式有点不同......你试过玩 ismember 吗?
  • 我没试过,但我想 ismember 会在片场上跑步。我想我可以尝试循环使用它,但它仍然效率低下。

标签: matlab list unique scilab


【解决方案1】:

我不知道为此任务设计的内置函数,我怀疑没有。我看到四个选项:

  1. 编写您自己的函数,对数组列表进行操作。尽管您可以使用unique 做一些事情,但这可能与您所怀疑的一样低效。不幸的是,当你尝试做例如p(:)(2),好像要提取每个列表条目的第二个元素,得到Not implemented in scilab...

  2. 将数组列表转换为矩阵。我不得不使用 for 循环来做到这一点,这需要地质时间(如果有人知道更好的方法,我很想听)但是一旦数据是矩阵形式,你就可以对它们进行切片,这样可以更容易比较按元素排列:

    q = ['a' 'b' 'c'; 'd' 'e' 'f']

    然后你可以做类似的事情

    q(:,2)

  3. 保存数据并使用它们的字符串处理功能在 ruby​​ 或 python 中处理它(或编译一些 ruby​​ 或 python 代码并从 scilab 中运行它)。与 Matlab 一样,Scilab 的优势在于其矢量化操作的速度。如果您不能在某种数据结构上使用矢量化函数,那么您必须询问是否值得将该工具用于该工作(或该数据类型 - 参见第 2 项)

  4. 根据单元格元素的性质,您可以对它们进行数字编码并比较行总和:如果您的元素确实是单个字符,那么也许每个元素都可以转换为数值,乘以一个因子适合其列位置,然后对行求和。比较每一行的总和将为您提供一种更快的方法来识别重复项。当然,如果您的数据真的是“21a acacia avenue”,那么您的编码方案会变得更像哈希,但它可能仍然可行。

【讨论】:

  • 是的。似乎没有内置功能可以执行此操作。我正在考虑一个将数组列表转换为二维矩阵的函数。如果有这样的功能,那么我可以在其行上使用 `unique' 功能...
猜你喜欢
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 2021-12-13
  • 2013-12-30
  • 1970-01-01
相关资源
最近更新 更多