matlab从对象列表中删除冗余对象(数组)

时间:2013-08-11 19:12:49

标签: matlab list unique scilab

在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'];

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

1 个答案:

答案 0 :(得分:0)

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

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

  2. 将数组列表转换为矩阵。我必须使用for循环这样做,它需要地质时间(如果有人知道我喜欢听的更好的方式)但是一旦数据以矩阵形式,你可以切片,这可以使它更容易比较行元素:

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

    then you can do stuff like

    q(:,2)

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

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