包含对应于矩阵中每个元素的出现次数的矩阵

时间:2013-09-04 13:34:36

标签: r matlab matrix

我有矩阵,假设

A = [1 2 3 1 1 1 2 3]

我想查找数字出现在矩阵中的次数。这个i / p的输出矩阵是

B = [1 1 1 2 3 4 2 2]

即。 1在阵列中出现4次,因此对应于1的最后一个值是4。

uniquesum unique没有帮助,因为它给出了元素发生的总次数,但我想要另一个矩阵,每次发生时都会增加计数。

4 个答案:

答案 0 :(得分:1)

试试这个:

B = ave(A,A,FUN=function(x) 1:length(x))

答案 1 :(得分:1)

您只需使用以下代码即可轻松完成此操作。这将假设A矩阵是一维的,但这不是一个假设。

A=[1 2 3 1 1 1 2 3];
vals = unique(A);
B = zeros(size(A));
for i = 1:numel(vals)
   idxs = find(diff([0,cumsum(A == vals(i))]));
   B(idxs) = 1:numel(idxs);
end

此解决方案适用于MATLAB,而非R.我不知道您想要哪一个。如果你想要一个R答案,我会建议其他人的答案之一:)

答案 2 :(得分:1)

以下是MATLAB中的解决方案:

B = sum(triu(bsxfun(@eq, A, A.')));

答案 3 :(得分:0)

对于Matlab:

B = sum(tril(repmat(A,length(A),1)).' + tril(repmat(NaN,length(A),length(A)),-1) == repmat(A,length(A),1))

如果A保证不包含零,则可以简化为:

B = sum(tril(repmat(A,length(A),1)).' == repmat(A,length(A),1));