八度 - 删除单元格数组中元素的出现

时间:2016-05-03 14:43:10

标签: arrays cell octave

在Octave中,我有这个单元格数组: y = { 'hello' 'world' 'a' 'world' 'g' 'I' 'w' 'hi'};

我需要能够删除元素的重复项。因此,例如,我想删除'world'的副本,这应该是输出:

ans =
{
  [1,1] = hello
  [1,2] = a
  [1,3] = g
  [1,4] = I
  [1,5] = w
  [1,6] = hi
}

除了通常的循环直到n次,Octave中是否有一个函数可以做到这一点?

我一直在寻找办法,但一无所获。从我所看到的情况来看,unique不会这样做,因为它会删除所有重复项。

2 个答案:

答案 0 :(得分:1)

如果您要从示例中显示的单元格数组中删除所有出现的字符串,则只需使用strcmp

x = y(~strcmp(y, 'world'));

%// {
%//     [1,1] = hello
%//     [1,2] = a
%//     [1,3] = g
%//     [1,4] = I
%//     [1,5] = w
%//     [1,6] = hi
%// }

如果您想要一次性删除多对重复项,可以轻松调整这一点。{/ 1}}。

ismember

如果您想删除除第一次出现的字符串以外的所有内容,您可以执行以下操作。

y = {'a', 'a', 'b', 'b', 'c', 'c'};
x = y(~ismember(y, {'a', 'b'});

答案 1 :(得分:1)

如果您想自动删除多次出现的项目,请使用此项:

y = { 'hello' 'world' 'a' 'world' 'g' 'I' 'w' 'hi'};
[Y, ~, J] = unique (y);
cnt = accumarray (J(:), 1);
Y(cnt == 1)

ans = 
{
  [1,1] = I
  [1,2] = a
  [1,3] = g
  [1,4] = hello
  [1,5] = hi
  [1,6] = w
}

cnt计算每个字符串的出现次数,因此Y(cnt == 1)只包含恰好出现一次的字符串。