对向量进行排序并计算相同的出现次数

时间:2012-12-07 22:50:50

标签: matlab sorting unique

执行以下操作的Matlab有效方式(无循环)是什么:将输入向量输入转换为输出向量输出,例如输出(i)是输入中小于或等于 input (i)的整数。

例如:

input = [5 3 3 2 4 4 4]

会给:

output = [7 3 3 1 6 6 6]

2 个答案:

答案 0 :(得分:1)

我找到了一个可能的答案:

output = arrayfun(@(x) sum(x>=input),input)

但它没有利用矢量化。

答案 1 :(得分:1)

首先,不要将input用于变量名称,它是保留关键字。我会在这里使用X

获得所需结果的另一种方法是:

[U, V] = meshgrid(1:numel(X), 1:numel(X));
Y = sum(X(U) >= X(V))

这是一个单行:

Y = sum(bsxfun(@ge, X, X'))

修改
如果X有多行,并且您希望在每一行上应用此操作,则这有点棘手。这是你可以做的:

[U, V] = meshgrid(1:numel(X), 1:size(X, 2));
V = V + size(X, 2) * idivide(U - 1, size(X, 2));
Xt = X';
Y = reshape(sum(Xt(U) >= Xt(V))', size(Xt))'

示例:

X =  
   5   3   3   2   4   4   4
   3   9   7   7   1   2   2

Y = 
   7   3   3   1   6   6   6
   4   7   6   6   1   3   3