-1

例如,我有一个单元格数组,例如:

Column1----Column2

'aaaa'--------4

'bbbb'--------5

'cccc'---------2

'cccc'---------0

'dddd'--------0

'dddd'--------3

'eeee'--------0

'ffff'-----------0

我想要的是合并具有相同元素的行。最后我想要得到的是:

'aaaa'--------4

'bbbb'--------5

'cccc'---------2

'dddd'--------3

'eeee'--------0

'ffff'-----------0

我正在寻找没有 for 循环的答案。

4

2 回答 2

0

查找所有完全唯一的字符串(即 ffff_ 0 和 ffff__ 1 是唯一的,但是 aaaa _1 和 aaaa___1 显然不是唯一的。(显然下划线代表格式?)

一旦你有了它,只用字母做同样的事情。

我很确定您必须以某种能力(以上)执行此操作才能获得所需的输出,如果是这种情况,我认为您正处于 for 循环和所有额外内存分配之间的速度权衡边缘和通过值排序找到独特的值。

于 2013-06-25T19:49:07.133 回答
0

尝试这个:

arr([arr{:,2}] ~= 0,:)

arr - rows:arr 的所有行,使得第二列不等于 0,columns:所有列

可能是某个地方的语法错误,自从我使用Matlab以来已经有一段时间了......

编辑:新答案

non_zero = transpose([arr{:,2}] ~= 0);
arr = arr(non_zero | ~ismember(arr(:,1),arr(non_zero,1)),:)

基本上我在做什么:获取所有行,使得右侧不为零,或者左侧不是非零行左侧的成员。只有在非零行中没有匹配左侧的零行才会满足后一个条件(因此不会重复)。现在请记住,如果您有任何重复的行(左侧和右侧相同),这仍然不起作用。如果这是一种可能性,那么请执行以下操作:

non_zero = transpose([arr{:,2}] ~= 0);
arr = arr(non_zero | ~ismember(arr(:,1),arr(non_zero,1)),:);
[~,U] = unique(arr(:,1));
arr = arr(U,:)
于 2013-06-25T18:26:42.463 回答