我有矩阵,假设
A = [1 2 3 1 1 1 2 3]
我想找到数字出现在矩阵中的次数。这个 i/p 的输出矩阵是
B = [1 1 1 2 3 4 2 2]
即 1 在数组中出现了 4 次,因此对应于 1 的最后一个值为 4。
unique
并且sum unique
没有帮助,因为它给出了元素出现的总次数,但我想要另一个矩阵,它每次出现时都会增加计数。
您可以使用以下代码非常简单地做到这一点。这将假设 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 答案,我会推荐其他人的答案之一:)
尝试这个:
B = ave(A,A,FUN=function(x) 1:length(x))
这是MATLAB中的一个解决方案:
B = sum(triu(bsxfun(@eq, A, A.')));
对于 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));