我尝试将矩阵A的每一行的数据标准化为十进制。
矩阵A看起来像:
[.01 .02 .03 .04 .05;
 1 2 3 4 5;
 1000 2000 3000 4000 5000];如何将第一行标准化为十进制,然后第二行row...till最后一行?而不使用'for/while'?
输出将如下所示:
[2 3 6 8 10;
 2 3 6 8 10;
 2 3 6 8 10];寻找一个脚本。谢谢!
发布于 2012-02-21 04:14:50
这应该会产生类似于您所要求的结果(使用统计工具箱中的tiedrank ):
f = @(x,i) tiedrank(x)*10/numel(x);
bsxfun(f,x',ones(1,3))'不过,要注意舍入和换行,一般情况下,您可能需要调整最后一行。
另请参阅https://stackoverflow.com/questions/9296568/matlab-normalize-data-into-deciles
发布于 2012-02-16 01:05:38
您可以使用sortrows命令根据特定列对矩阵进行排序。从这里开始,如果n是矩阵的长度,只需为矩阵(1: n/10,i)赋值1,为矩阵(n/10+1:2*n/10)赋值2,依此类推(显然,如果n/10不是整数,则需要进行一些舍入)。
发布于 2012-02-16 02:41:42
您可以结合使用统计工具箱中的QUANTILE函数和HISTC来生成边:
x = randn(20,1);
q = quantile(x,0:0.1:1);
[~,xqnorm] = histc(x,q);HISTC :HISTC值不等于bin的右边缘。因此,max(x)将不会被分配到第10个bin,而是分配给额外的(第11个) bin。为了避免它,你可以稍微增加最大的边(在histc调用之前插入这一行):
q(end) = q(end)+0.1;https://stackoverflow.com/questions/9363342
复制相似问题