Matlab - 过滤掉相同的单元格条目
Matlab - filter out identical cell entries
我的矩阵是 10000 x 2。看起来像这样:
Ann Beth
Bob Pete
Sam Sam
Jen Ted
...
两列中有许多行具有相同的名称(例如 Sam)。我只需要具有不同名称的行。我想到了一个带有 ismember/string 比较的 for 循环,但这非常慢,并且有一些这样的矩阵。
另一个也很慢的选项是唯一的第一列和 运行 一个 for 循环以查找唯一值并在每次查找的值相同时删除。然而,这也很慢。请帮助优化。
谢谢
您可以使用 strcmp 获取对应于相同行的索引的逻辑数组,即将第一列与第二列进行比较并删除对应于索引 1 的行。
Example:
C = {'Ann' 'Beth';
'Bob' 'Pete';
'Sam' 'Sam';
'Jen' 'Ted'};
idx = strcmp(C(:,1),C(:,2))
此处 idx
看起来像这样:
idx =
0
0
1
0
因此第 3 行包含相同的名称。现在删除那些:
C(idx,:) = [];
C =
'Ann' 'Beth'
'Bob' 'Pete'
'Jen' 'Ted'
我的矩阵是 10000 x 2。看起来像这样:
Ann Beth
Bob Pete
Sam Sam
Jen Ted
...
两列中有许多行具有相同的名称(例如 Sam)。我只需要具有不同名称的行。我想到了一个带有 ismember/string 比较的 for 循环,但这非常慢,并且有一些这样的矩阵。 另一个也很慢的选项是唯一的第一列和 运行 一个 for 循环以查找唯一值并在每次查找的值相同时删除。然而,这也很慢。请帮助优化。 谢谢
您可以使用 strcmp 获取对应于相同行的索引的逻辑数组,即将第一列与第二列进行比较并删除对应于索引 1 的行。
Example:
C = {'Ann' 'Beth';
'Bob' 'Pete';
'Sam' 'Sam';
'Jen' 'Ted'};
idx = strcmp(C(:,1),C(:,2))
此处 idx
看起来像这样:
idx =
0
0
1
0
因此第 3 行包含相同的名称。现在删除那些:
C(idx,:) = [];
C =
'Ann' 'Beth'
'Bob' 'Pete'
'Jen' 'Ted'