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

matlab从对象(数组)列表中删除冗余对象,matlab,list,unique,scilab,Matlab,List,Unique,Scilab,在matlab或scilab中,如何删除数组对象列表中的冗余项?也许把它保存为矩阵 例如: p = list(); p(1) = ['a' 'b' 'c']; p(2) = ['a' 'b' 'c']; p(3) = ['b' 'a' 'c'] 例如,从上面提到的列表开始,我想得到一个列表q as q(1) = ['a' 'b' 'c']; q(2) = ['b' 'a' 'c']; unique函数仅适用于数组,而不适用于数组列表。我可以通过查看所有矩阵来手动执行此操作,但效率不高。我不知

在matlab或scilab中,如何删除数组对象列表中的冗余项?也许把它保存为矩阵

例如:

p = list();
p(1) = ['a' 'b' 'c'];
p(2) = ['a' 'b' 'c'];
p(3) = ['b' 'a' 'c']
例如,从上面提到的列表开始,我想得到一个列表q as

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

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

我不知道为此任务设计的内置函数,我怀疑没有。我认为有四种选择:

  • 编写自己的函数,在数组列表上运行。这可能和您所怀疑的一样低效,尽管您可以使用
    unique
    做一些事情。不幸的是,当您尝试执行例如
    p(:)(2)
    ,好像要提取每个列表项的第二个元素时,您得到的
    不是在scilab中实现的…

  • 将数组列表转换为矩阵。我必须使用for循环来完成这项工作,这需要地质时间(如果有人知道更好的方法,我很乐意听到),但一旦数据以矩阵形式出现,您就可以对它们进行切片,这样可以更容易地对行进行元素比较:

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

    然后你可以做像这样的事情

    q(:,2)

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

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


  • “多余条目”是什么意思?您正在寻找
    独特的
    功能吗?也许你可以显示“我认为这是一个多余的条目”-我们不能读你的想法…通常情况下,“如果我从这个开始,我想以那个结束”的表述方式(以及“这就是我尝试过的”)是获得有用答案的好方法。谢谢你的评论。我明白你的意思了,我要更新我的问题。现在更清楚了!我会给它一些思考-这是一个有点不同于我通常使用Matlab。。。你试过玩ismember吗?我没试过,但我想ismember可以在片场上运行。我想我可以试着在一个循环中使用它,但它仍然是低效的。是的。似乎没有内置的函数来执行此操作。我正在考虑一个函数,它将数组列表转换为2d矩阵。如果有这样的函数,那么我可以在它的行上使用'unique'函数。。。