首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将矩阵中的数据规范化为十进制

将矩阵中的数据规范化为十进制
EN

Stack Overflow用户
提问于 2012-02-20 23:10:19
回答 4查看 1K关注 0票数 1

我尝试将矩阵A的每一行的数据标准化为十进制。

矩阵A看起来像:

代码语言:javascript
运行
复制
[.01 .02 .03 .04 .05;
 1 2 3 4 5;
 1000 2000 3000 4000 5000];

如何将第一行标准化为十进制,然后第二行row...till最后一行?而不使用'for/while'?

输出将如下所示:

代码语言:javascript
运行
复制
[2 3 6 8 10;
 2 3 6 8 10;
 2 3 6 8 10];

寻找一个脚本。谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-21 04:14:50

这应该会产生类似于您所要求的结果(使用统计工具箱中的tiedrank ):

代码语言:javascript
运行
复制
f = @(x,i) tiedrank(x)*10/numel(x);
bsxfun(f,x',ones(1,3))'

不过,要注意舍入和换行,一般情况下,您可能需要调整最后一行。

另请参阅https://stackoverflow.com/questions/9296568/matlab-normalize-data-into-deciles

票数 1
EN

Stack Overflow用户

发布于 2012-02-16 01:05:38

您可以使用sortrows命令根据特定列对矩阵进行排序。从这里开始,如果n是矩阵的长度,只需为矩阵(1: n/10,i)赋值1,为矩阵(n/10+1:2*n/10)赋值2,依此类推(显然,如果n/10不是整数,则需要进行一些舍入)。

票数 1
EN

Stack Overflow用户

发布于 2012-02-16 02:41:42

您可以结合使用统计工具箱中的QUANTILE函数和HISTC来生成边:

代码语言:javascript
运行
复制
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调用之前插入这一行):

代码语言:javascript
运行
复制
q(end) = q(end)+0.1;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9363342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档