Matlab 如何累计一个单元格数组?

Matlab 如何累计一个单元格数组?,matlab,Matlab,说我有: A = {'a.java' 1;'a.java' 2; 'b.java' 1; 'b.java' 0; 'a.java' 4; 'c.java' 6}; 我想根据第一列的相似性来累积第二列的编号 我想得到: B = {'a.java' 1+2+4; 'b.java' 1+0; 'c.java' 6} 我怎样才能做到这一点 非常感谢,在A中查找唯一的键(使用unique函数可以方便地返回从A中的键到唯一键集中的项的映射),然后迭代这些键 [u,i1,i2]=unique(A(:,1)

说我有:

A = {'a.java' 1;'a.java' 2; 'b.java' 1; 'b.java' 0; 'a.java' 4; 'c.java' 6};
我想根据第一列的相似性来累积第二列的编号

我想得到:

B = {'a.java' 1+2+4; 'b.java' 1+0; 'c.java' 6}
我怎样才能做到这一点

非常感谢,

在A中查找唯一的键(使用
unique
函数可以方便地返回从A中的键到唯一键集中的项的映射),然后迭代这些键

[u,i1,i2]=unique(A(:,1));     % i1 is not needed, actually
Avalues = cell2mat(A(:,2));   % convert numerical part of cell array to matrix
for i=1:max(i2)
    u{i,2}=sum(Avalues(i2==i));
end
这也可以扩展到在单元格数组中的多个数据列上按列工作。

类似于以下内容:

[a b c] = unique({A{:,1}});
for i=1:length(a)
    B{i, 1} = a(i);
    B{i, 2} = sum([A{find(c==i), 2}]);
end

使用以下函数和,您无需for循环即可轻松完成此操作:

>> [uniqueValues,~,index] = unique(A(:,1));
>> B = [uniqueValues num2cell(accumarray(index,[A{:,2}]))]

B = 

    'a.java'    [7]
    'b.java'    [1]
    'c.java'    [6]