假设我有一个矩阵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函数,然后手动分配十进制,但效率非常低。
答案 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