Matlab - 每列排序十进制

时间:2015-12-04 18:42:37

标签: arrays matlab sorting statistics

假设我有一个矩阵A [m x 1],其中m不一定是偶数。我创建一个矩阵B also [m x 1],它告诉我A中元素的十分位数(即矩阵B的数字从1到10)。

我知道我可以使用函数sort(A)来获取A中元素的位置,从那里我可以手动获得十分位数。还有另一种方法吗?

我认为一种可能性是B = ceil(10 * tiedrank(A) / length(A)。你怎么看?这有什么问题吗?

另外,更一般地说,如果我有一个矩阵A [m x n]并且我想创建一个矩阵B also [m x n],其中B的每一列应该具有{{1}中相应列的十分位数有没有一种方法可以在没有for循环的情况下完成它?

希望手头的问题很清楚。到目前为止,我一直在使用sort函数,然后手动分配十进制,但效率非常低。

1 个答案:

答案 0 :(得分:2)

我就是这样做的:

N = 10;
B = ceil(sum(bsxfun(@le, A(:), A(:).'))*N/numel(A));

对于每个元素,这计算了多少元素小于或等于它;然后将结果舍入为10值。

根据您定义十分位数的方式,您可能希望将@le更改为@lt,或将ceil更改为floor。对于numel(A)的{​​{1}}倍,上述定义会在每个N分位数中精确地给出numel(A)/N个值。例如,

N