删除数组中的字符串元素(Matlab)
Delete string element in array (Matlab)
我有一个字符串:pairs = ['AA';'AB';'BB';'AC'; 'CC'; 'CB';'DE'; 'BC']
如何删除字符串中具有相同字符的元素,如 'AA'、'BB'、'CC'?
预期的输出应该是:out = ['AB';'AC';'CB';'DE';'BC']
使用逻辑索引并比较第一列和第二列:
out = pairs(pairs(:,1)~=pairs(:,2),:)
对于更通用的方法(覆盖具有两个以上字符的行),您可以使用 bsxfun 创建所有元素彼此相等的行的索引:
allsame = any(~bsxfun(@eq, pairs, pairs(:,1)), 2);
out = pairs(allsame,:);
如果所有条目只有 2 个元素,您可以减去每个元素,如果结果为 0,则两个元素相同。
示例:
pairs = {'AA';'AB';'BB';'AC'; 'CC'; 'CB';'DE'; 'BC'}
Diffs = cellfun(@(x) diff(x),pairs)
Diffs
看起来像这样:
Diffs =
0
1
0
2
0
-1
1
1
现在删除这些条目:
pairs(~Diffs) = []
pairs =
'AB'
'AC'
'CB'
'DE'
'BC'
我有一个字符串:pairs = ['AA';'AB';'BB';'AC'; 'CC'; 'CB';'DE'; 'BC']
如何删除字符串中具有相同字符的元素,如 'AA'、'BB'、'CC'?
预期的输出应该是:out = ['AB';'AC';'CB';'DE';'BC']
使用逻辑索引并比较第一列和第二列:
out = pairs(pairs(:,1)~=pairs(:,2),:)
对于更通用的方法(覆盖具有两个以上字符的行),您可以使用 bsxfun 创建所有元素彼此相等的行的索引:
allsame = any(~bsxfun(@eq, pairs, pairs(:,1)), 2);
out = pairs(allsame,:);
如果所有条目只有 2 个元素,您可以减去每个元素,如果结果为 0,则两个元素相同。
示例:
pairs = {'AA';'AB';'BB';'AC'; 'CC'; 'CB';'DE'; 'BC'}
Diffs = cellfun(@(x) diff(x),pairs)
Diffs
看起来像这样:
Diffs =
0
1
0
2
0
-1
1
1
现在删除这些条目:
pairs(~Diffs) = []
pairs =
'AB'
'AC'
'CB'
'DE'
'BC'